ADO.net速度慢的问题

windyyang 2003-11-07 04:50:09
我这里还有一个问题想请教你大家:
经我们测试,发现ADO.Net的写入速度为什么比ADO的写入速度忙了7倍?但我们不知道ADO.net花费在那个环节呢?不知道如何提高速度。
ADO.net的测试程序在下面,ADO也是使用循环,而且方法也是非常笨的。
代码:
private void button1_Click(object sender, System.EventArgs e)
{
OleDbCommand cmdInsertGoods;
OleDbParameterCollection pars;
OleDbConnection conn;
DataSet Goods;
DataTable goods;

conn = new OleDbConnection(textBox1.Text);
conn.Open();

//初始化插入Goods的命令
cmdInsertGoods = new OleDbCommand(@"INSERT INTO Goods2
(fstrComputer, fstrOperator, fdtmOpTime, fstrGoodsID, fstrGdsName, fstrGdsStandard,
fstrGdsOrigin, fblnIsColor, fblnIsGoods, fblnIsSize, fblnIsUse, fstrSizeGroupID,
fstrUnitM, fblnIsPro, fblnIsBrunt, fstrProperties)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",conn);
pars = cmdInsertGoods.Parameters;
OleDbParameter parfstrComputer = pars.Add(new OleDbParameter("fstrComputer", OleDbType.VarWChar, 50, "fstrComputer"));
OleDbParameter parfstrOperator = pars.Add(new OleDbParameter("fstrOperator", OleDbType.VarWChar, 50, "fstrOperator"));
OleDbParameter parfdtmOpTime = pars.Add(new OleDbParameter("fdtmOpTime", OleDbType.DBTimeStamp));
OleDbParameter parfstrGoodsID = pars.Add(new OleDbParameter("fstrGoodsID", OleDbType.VarWChar, 50, "fstrGoodsID"));
OleDbParameter parfstrGdsName = pars.Add(new OleDbParameter("fstrGdsName", OleDbType.VarWChar, 128, "fstrGdsName"));
OleDbParameter parfstrGdsStandard = pars.Add(new OleDbParameter("fstrGdsStandard", OleDbType.VarWChar, 50, "fstrGdsStandard"));
OleDbParameter parfstrGdsOrigin = pars.Add(new OleDbParameter("fstrGdsOrigin", OleDbType.VarWChar, 50, "fstrGdsOrigin"));
OleDbParameter parfblnIsColor = pars.Add(new OleDbParameter("fblnIsColor", OleDbType.Boolean, 2, "fblnIsColor"));
OleDbParameter parfblnIsGoods = pars.Add(new OleDbParameter("fblnIsGoods", OleDbType.Boolean, 2, "fblnIsGoods"));
OleDbParameter parfblnIsSize = pars.Add(new OleDbParameter("fblnIsSize", OleDbType.Boolean, 2, "fblnIsSize"));
OleDbParameter parfblnIsUse = pars.Add(new OleDbParameter("fblnIsUse", OleDbType.Boolean, 2, "fblnIsUse"));
OleDbParameter parfstrSizeGroupID = pars.Add(new OleDbParameter("fstrSizeGroupID", OleDbType.VarWChar, 36, "fstrSizeGroupID"));
OleDbParameter parfstrUnitM = pars.Add(new OleDbParameter("fstrUnitM", OleDbType.VarWChar, 20, "fstrUnitM"));
OleDbParameter parfblnIsPro = pars.Add(new OleDbParameter("fblnIsPro", OleDbType.Boolean, 2, "fblnIsPro"));
OleDbParameter parfblnIsBrunt = pars.Add(new OleDbParameter("fblnIsBrunt", OleDbType.Boolean, 2, "fblnIsBrunt"));
OleDbParameter parfstrProperties = pars.Add(new OleDbParameter("fstrProperties", OleDbType.VarWChar, 200, "fstrProperties"));


OleDbCommand cmdSelectGoods = new OleDbCommand("SELECT * FROM Goods",conn);
Goods = new DataSet();
OleDbDataAdapter adp = new OleDbDataAdapter(cmdSelectGoods);
adp.Fill(Goods,"Goods");
goods = Goods.Tables["Goods"];

DataColumn colfstrComputer = goods.Columns["fstrComputer"];
DataColumn colfstrOperator = goods.Columns["fstrOperator"];
DataColumn colfdtmOpTime = goods.Columns["fdtmOpTime"];
DataColumn colfstrGoodsID = goods.Columns["fstrGoodsID"];
DataColumn colfstrGdsName = goods.Columns["fstrGdsName"];
DataColumn colfstrGdsStandard = goods.Columns["fstrGdsStandard"];
DataColumn colfstrGdsOrigin = goods.Columns
["fstrGdsOrigin"];
DataColumn colfblnIsColor = goods.Columns["fblnIsColor"];
DataColumn colfblnIsGoods = goods.Columns["fblnIsGoods"];
DataColumn colfblnIsSize = goods.Columns["fblnIsSize"];
DataColumn colfblnIsUse = goods.Columns["fblnIsUse"];
DataColumn colfstrSizeGroupID = goods.Columns["fstrSizeGroupID"];
DataColumn colfstrUnitM = goods.Columns["fstrUnitM"];
DataColumn colfblnIsPro = goods.Columns["fblnIsPro"];
DataColumn colfblnIsBrunt = goods.Columns["fblnIsBrunt"];
DataColumn colfstrProperties = goods.Columns["fstrProperties"];

foreach(DataRow row in goods.Rows)
{
try
{
parfstrComputer.Value = row[colfstrComputer];
parfstrOperator.Value = row[colfstrOperator];
parfdtmOpTime.Value = row[colfdtmOpTime];
parfstrGoodsID.Value = row[colfstrGoodsID];
parfstrGdsName.Value = row[colfstrGdsName];
parfstrGdsStandard.Value = row[colfstrGdsStandard];
parfstrGdsOrigin.Value = row[colfstrGdsOrigin];
parfblnIsColor.Value = row[colfblnIsColor];
parfblnIsGoods.Value = row[colfblnIsGoods];
parfblnIsSize.Value = row[colfblnIsSize];
parfblnIsUse.Value = row[colfblnIsUse];
parfstrSizeGroupID.Value = row[colfstrSizeGroupID];
parfstrUnitM.Value = row[colfstrUnitM];
parfblnIsPro.Value = row[colfblnIsPro];
parfblnIsBrunt.Value = row[colfblnIsBrunt];
parfstrProperties.Value = row[colfstrProperties];

cmdInsertGoods.ExecuteNonQuery();
}
catch(Exception ex)
{
MessageBox.Show(this,ex.Message);
}
}
}
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
windyyang 2003-11-08
  • 打赏
  • 举报
回复
或者是ADO.net参数集赋值开销太大呢
windyyang 2003-11-08
  • 打赏
  • 举报
回复
我使用的是Access数据库啊!但是使用ADO,也使用Access数据库,确实快了7倍!(有没可能是ADO使用了管道的原因呢?或者是参数集赋值开销太大呢?)
hhbhx 2003-11-08
  • 打赏
  • 举报
回复
同意sql一说!
delphiseabird 2003-11-08
  • 打赏
  • 举报
回复
你用的不是sql server 么
否则为什么不用sql系列的数据访问控件
ssdjmcj8048 2003-11-08
  • 打赏
  • 举报
回复
ole没有针对性优化,显然会很慢的,ManageCode本来就比NativeCode慢。
使用sql组件我想肯定会快很多了
qli 2003-11-08
  • 打赏
  • 举报
回复
ole is slow,
but sqlcommand is must faster
godliu521 2003-11-07
  • 打赏
  • 举报
回复
ado.net有个dataadapter,需要一个中继,呵呵
不过我不是很清楚

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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