读书人

高并发下数据插入有关问题

发布时间: 2013-09-23 11:26:10 作者: rapoo

高并发下数据插入问题
本帖最后由 waCtr 于 2013-09-15 18:06:37 编辑 一个简单插入压力测试
有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此的时候 插入失败了 怎么办??
这么写 高并发的时候估计 会出问题???

[解决办法]
这种用循环,效果最差,如果没有什么特别的数据,直接传入参数,用存储过程处理,调用存储过程就可以了.

还有要用事务处理,要么全部成功,要么全部失败.
整个过程只要提交一次.
[解决办法]
存储过程用循环和程序里用循环不一样.你要插入的数据是什么样子?你可以详细一点写出来,我试试看
[解决办法]
在存储过程里执行要比在程序里执行快很多,你坚信这一点就是了
[解决办法]
引用:

在存储过程里执行要比在程序里执行快很多,你坚信这一点就是了


没有什么实际明显可见的差别。

读书人网 >asp.net

热点推荐