高并发下数据插入问题

waCtr 2013-09-15 06:02:40
一个简单插入压力测试
有50个表(tableAC1到tableAC50)和50个表(tableAB1到tableAB50) 我用的是webservice 客户端调用这个webservice 往里面插数据 客户端只需点击保存按钮一次 webservice中的这个插入方法 就将循环50次分别 往tableAC1到tableAC50 和 tableAB1到tableAB50 的表中插入这条数据

我是这样写的 不知道 在高并发下 效率怎样(目前自己单独测试 感觉点击一次有点慢 高并发估计很慢 ,而且有可能会 这个循环还没执行完 下个就开始了。 望大神给个解决思路)
不知道说明白了没, 代码如下。

[WebMethod]
//tast 实体
public bool InsertList(tast sct)
{
List<DateHelper> List = null;//一个用来保存sql语句和值的类
bool Test=false;//用于记录插入是否成功
string tableAC1= "tableAC1";//表tableAC1
string tableAB1= "tableAB1";//表tableAB1
for (int i = 1; i <=50; i++)
{
List = new List<DateHelper>();
string SQL1="insert into "+tableAC1+i+"(.....)values(....)";
SqlParameter[] Par1 = new SqlParameter[]{
..
...
};
..
...
string SQL2="insert into "+tableAB1+i+"(.....)values(....)"
SqlParameter[] Par1 = new SqlParameter[]{
..
...
};
..
...
SqlDbHelper db = new SqlDbHelper();
if (db.ExecuteSqlTran(List) > 0)//执行成功返回true否则else
{
Test = true;
}
else{
Test = false;
break;插入失败则直接跳出循环
}
}
}

补充下 比如执行一次插入 的话 循环到20此的时候 插入失败了 怎么办??
这么写 高并发的时候估计 会出问题???
...全文
373 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
myhope88 2013-09-16
  • 打赏
  • 举报
回复
可以再优化下
waCtr 2013-09-15
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
你的代码应该好好格式化一下。例如在vs中(c#程序员的快捷键方式)按 Ctrl+E+D 键可以格式化,或者你可以重写一下最后的一个 } 符号格式化一下。 你或许可以看到,比如说,你 db.ExecuteSqlTran(List) 原本应该写在 for 循环外边,结果其实这里是写在里边了!
在 for 的外面的话 只能插入最后一张表的数据啊 就是第50条 我写在里面是让它 每张表都插入
  • 打赏
  • 举报
回复
你的代码应该好好格式化一下。例如在vs中(c#程序员的快捷键方式)按 Ctrl+E+D 键可以格式化,或者你可以重写一下最后的一个 } 符号格式化一下。 你或许可以看到,比如说,你 db.ExecuteSqlTran(List) 原本应该写在 for 循环外边,结果其实这里是写在里边了!
  • 打赏
  • 举报
回复
引用 5 楼 hdhai9451 的回复:
在存储过程里执行要比在程序里执行快很多,你坚信这一点就是了
没有什么实际明显可见的差别。
Andy__Huang 2013-09-15
  • 打赏
  • 举报
回复
在存储过程里执行要比在程序里执行快很多,你坚信这一点就是了
waCtr 2013-09-15
  • 打赏
  • 举报
回复
引用 3 楼 hdhai9451 的回复:
存储过程用循环和程序里用循环不一样.你要插入的数据是什么样子?你可以详细一点写出来,我试试看
插入的数据 现在还没有严格的要求 都是随便插的 除了ID 不能为空 其他都能为空 目前就是次用参数的形式 最后一期执行的 最后用ExecuteSqlTran方法就是确保 一次执行 把所有表都插入数据的目的 if (db.ExecuteSqlTran(List) > 0)//执行实现数据库事物

string SQL1="insert into "+tableAC1+i+"(.....)values(....)";
 SqlParameter[] Par1 = new SqlParameter[]{
new SqlParameter("@ID",Guid.NewGuid()),
...
};
Andy__Huang 2013-09-15
  • 打赏
  • 举报
回复
存储过程用循环和程序里用循环不一样.你要插入的数据是什么样子?你可以详细一点写出来,我试试看
waCtr 2013-09-15
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
这种用循环,效果最差,如果没有什么特别的数据,直接传入参数,用存储过程处理,调用存储过程就可以了. 还有要用事务处理,要么全部成功,要么全部失败. 整个过程只要提交一次.
确实有点慢 假如用存储过程 这里也的写循环啊 而且必须循环50次 因为每个表都要插入 用的就是事物 这个方法就是实现数据库事物的ExecuteSqlTran()
Andy__Huang 2013-09-15
  • 打赏
  • 举报
回复
这种用循环,效果最差,如果没有什么特别的数据,直接传入参数,用存储过程处理,调用存储过程就可以了. 还有要用事务处理,要么全部成功,要么全部失败. 整个过程只要提交一次.

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧