C#代码 数据操作的效率问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 00:15:07
以下代码 dsDB.Tables[0] 和 DSDBBlackList.Tables[0] 内均是3w多条数据,DBBlackListVer,AccCount都是已赋值的变量
代码实现的目的很简单。
现在的问题是。循环2几乎一瞬间就完成。但是循环1要执行10分钟以上。在循环1执行的时候,本程序的cpu占有只有1-3%
请问如何提高循环1的效率,是给DSDBBlackList赋值的那两句代码比较耗时吗?
//循环1
foreach (DataRow dr in dsDB.Tables[0].Rows)
{
icc = Convert.ToInt32(dr["CardCode"]);
if ((icc < 0) || (icc > AccCount))
{
sReturn += icc.ToString();
continue;
}
DSDBBlackList.Tables[0].Rows[icc]["ChgType"] = 1;
DSDBBlackList.Tables[0].Rows[icc]["BlackListVer"] = DBBlackListVer;
}
DSDBBlackList.Tables[0].AcceptChanges();
//循环2
foreach (DataRow drdel in DSDBBlackList.Tables[0].Rows)
{

我的看法,是在
sReturn += icc.ToString();

DSDBBlackList.Tables[0].Rows[icc]["ChgType"] = 1;

第一句,字符串连接操作效率很低,应该是用StringBuilder.Append(icc)代替;
第二句是装箱操作,装箱操作非常费时,应该替换成
在循环外先定义一个 object i1=1;
然后
DSDBBlackList.Tables[0].Rows[icc]["ChgType"] = i1;//避免够多的装箱。

不知道行不行的通,试试先 ,
PS:不知道DSDBBlackList.Tables[0].Rows[icc]["ChgType"] = "1";这样改会不会有运行时错误

现在 CPU 多数是 32 位的, 数据类型要优先考虑用 int 类型, 因为 int 是 4 字节长度

你 Convert.Toint16 建议改成 Convert.Toint32

foreach (DataRow dr in dsDB.Tables[0].Rows)
{
icc = Convert.ToInt32(dr["CardCode"]);

if ((icc < 0) || (icc > AccCount))
{
sReturn += icc.ToString();
continue;
}

//DataRow 是引用类型, 可以直接修改值, DataSet 中 DataTable 值都会一起变化
dr["ChgType"] = 1;
dr["BlackListVer"] = DBBlackListVer;
}

DSDBBlackList.Tables[0]