【发布时间】:2015-05-14 19:56:12
【问题描述】:
我的数据库中有一个包含大约 200k 条目的视图。我正在使用以下代码阅读它:
using (SqlConnection conn = new SqlConnection....)
{
conn.Open();
string query = "SELECT * FROM SP3DPROJECT.dbo.XSystemHierarchy";
using (SqlCommand comm = new SqlCommand())
{
comm.CommandText = query;
comm.Connection = conn;
using (SqlDataReader reader = comm.ExecuteReader())
{
DateTime start = DateTime.Now;
while (reader.Read())
{
// Code goes here, but for performance
// test I'm letting this empty
}
DateTime end = DateTime.Now;
TimeSpan elapsed = (end- start).TotalSeconds;
}
}
}
视图只有两列GUID 类型。 ExecuteCommand() 非常快,但是 while 循环(即使没有代码,只是循环)需要大约 150 秒。
有没有更好或更快的方法来做到这一点?
【问题讨论】:
-
DataSet 不会更快,因为归档 DataSet 使用在 SqlDataReader.Read() 之上实现的 DataAdapter。因此,填充 DataSet 比 RBasniak 的代码更严格。
-
视图本身呢?从您的视图中选择行的速度有多快?
-
DateTime is not the recommended way to performance test code。使用它可能会产生非常不同的结果。
-
@ErikPhilips:确实如此,但是当结果是150秒时,并不是因为时钟定时器的精度低。
-
我的钱在你看来很贵。
标签: c# sql-server