首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2013-09-23 
高并发下数据插入问题本帖最后由 waCtr 于 2013-09-15 18:06:37 编辑一个简单插入压力测试 有50个表(table

高并发下数据插入问题
本帖最后由 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此的时候  插入失败了  怎么办??
这么写 高并发的时候估计 会出问题???  

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

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

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


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

热点排行