我正在使用SQl数据读取器从SQL数据库中获取值。
语言VB.NET
将数据输入阅读器后,我运行了一个while循环
While reader.Read
If reader.HasRows() Then
/* Proessing of data */
End If
End While
我观察到while循环需要花费大量时间来处理,因为有很多行。 有没有更好的实施方式。
请评论: 我应该将SQlDataReader数据放入arraylists,然后使用arraylists处理数据吗?
ALGO:
While reader.read
/* Put data into Arraylists */
End While
for(arraylist row count)
/*Process data*/
end for
答案 0 :(得分:1)
您可以将循环逻辑放入TSQL中基于SET的逻辑吗?
因此,不是迭代代码中的每一行,而是让RDBMS在TSQL中执行它。这就是RDBMS的设计和擅长的目标。
请告诉我们您在循环中所做的工作以及用于生成数据集的TSQL。
答案 1 :(得分:1)
检查数据读取器是否在循环内部有行是没有意义的。如果没有行,Read
方法返回false,因此它不会进入循环,如果有行,HasRows
方法返回true,即使您已读取所有行。删除它会节省一些时间,但几乎不可能:
While reader.Read
/* Proessing of data */
End While
在处理之前将所有数据读入列表不会给您带来更好的性能。相反,您将使用大量可能更好地用于其他内容的内存。
答案 2 :(得分:0)
不要以为从数据库中读取数据需要花费很多时间 您可以测量VB代码块中经过的时间,如:
startTime = Now
....
stopTime = Now
elapsedTime = stopTime.Subtract(startTime)
先测量,然后优化真正需要时间的东西。
(如果您使用Team Studio,可以尝试使用内置的分析器。)