我们在生产中存在性能问题,我们正在努力解决。在我们尝试解决它的过程中,我们关注数据表。
我们的流程:
DataTable
StringBuilder
并带有分隔符StringBuilder
将所有文字写入构建CSV文件的Response.Write
问题在于生产,我们的客户表示操作超时。我们无法在开发中重现超时,这可能是因为生产中的数据量。
第1步:
我们在select查询上运行了一个分析器,运行速度非常快。
第2步:
我们有以下代码:
SqlDataReader reader = searchQuery.ExecuteReader();
returnTable.Load(reader);
第3步:
我们像这样迭代returnTable
:
foreach (DataRow order in orders.Rows)
{
trackingNumber = order["TrackingNumber"] != null ? order["TrackingNumber"].ToString() : errString;
created = order["Created"] != null ? ((DateTime)order["Created"]).ToString() : errString;
// rest of the fields
}
第4步:
HttpContext.Current.Response.Write(bld.ToString());
现在,当我们运行第2步时,会发生什么? DataTable
是否已满载?
如果我们在步骤3中的每一行中轮询数据库,我会发现问题,因为这可能会减慢我们的流程。但如果它一次加载它,我就看不出这是怎么回事。
基本上:DataTable
一次加载所有内容,还是使用延迟加载?
答案 0 :(得分:4)
当我们运行第2步时,会发生什么?数据表是否已满载?
查询返回的所有值都将传输到应用程序并加载到DataTable
。
是否使用延迟加载?
不,它没有。
你能做什么: