.NET迭代数据表中的行的最快方法?
从数据表中读取/比较行信息时,通常哪个最快.NET迭代数据表中的行的最快方法?,.net,performance,ado.net,datatable,iteration,.net,Performance,Ado.net,Datatable,Iteration,从数据表中读取/比较行信息时,通常哪个最快 'assume dt as datatable' 'method 1' dim i as int32 for i = 0 to dt.rows.count - 1 .... next 'method 2' dim row as datarow for each row in dt.rows .... next 如果有区别,在什么情况下使用一个比另一个更划算 提前感谢您的指导 实际上没有区别。虽然从技术上讲,在foreach方法中要付
'assume dt as datatable'
'method 1'
dim i as int32
for i = 0 to dt.rows.count - 1
....
next
'method 2'
dim row as datarow
for each row in dt.rows
....
next
如果有区别,在什么情况下使用一个比另一个更划算
提前感谢您的指导 实际上没有区别。虽然从技术上讲,在foreach方法中要付出很小的代价,但是对于通过IEnumerable接口,第二种方法会有轻微的惩罚。然而,在某些情况下,为了代码的清晰性,我个人总是使用方法2。但是,如果我需要在分析当前行时访问下一行/上一行,我会使用方法1。@gdean232是正确的-几乎没有任何区别。如果性能有问题,使用SqlDataReader会更快。编译器会将每个循环扩展为一个短while循环
for each row in dt.rows
// expands to:
IEnumerator e = dt.rows.GetEnumerator()
while e.MoveNext()
row = e.Current
所以你要付少量的管理费。但为了澄清,如果您只处理一行,并且不修改数据集,我仍然会坚持使用每一行。foreach实现实际上比标准实现略快,因为每个索引数组访问都需要进行边界检查。然而,由于这个成语:
for(int i =0; i < myArray.Count; ++i)
{
// do something with myArray[i];
}
for(int i=0;i
如果是常见的,编译器会将其作为特例进行查找并进行优化,因此速度会更快。但是,与该格式的任何小偏差(例如int len=MyArray.Count;for(int i=0;i
是的,在我的测试工具中,这两种方法仅在大约100K次迭代后显示性能差异。