我们在生产中遇到了性能问题,我们正在努力解决。在我们尝试解决它的过程中,我们关注数据表。
我们的流程:
- 我们在数据库上运行选择查询
- 将数据放入一个
DataTable
StringBuilder
我们用分隔符将所有数据写入 a- 将
StringBuilder
所有文本写入Response.Write
CSV 文件
问题出在生产中,我们的客户说操作超时。我们无法重现开发中的超时,这可能是因为生产中的数据量。
第 1 步:
我们在选择查询上运行了一个分析器,它运行得非常快。
第 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
一次加载所有内容,还是使用延迟加载?