我有一个在IIS中托管的asp.net网站。我最近注意到,从数据库返回大量结果集时,IIS工作进程的内存只是保持增长(每次查询运行时大约为400MB)。如果这些大型查询中的一些发生在同一时间运行,它可能会消耗内存(已经看到它达到了5GB),并且服务器放慢了速度。使用DataTable的ASP.NET内存泄漏/高内存
当数据加载到DataTable中时,我已将其缩小到一行代码。
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(storedProcedureName, connection))
using(DataTable dataTable = new DataTable())
{
command.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
// Memory Spikes on dataTable.Load
dataTable.Load(reader);
}
}
我不明白什么是内存被分配到DataTable似乎并没有被处理掉,因为我期望的那样。当DataTable超出范围或者网页离开或甚至当用户退出网站时,内存保持在同一级别。这在多用户系统中显然是一个问题。
我已经使用了一个内存分析器,它在内存中保存了数千个字符串,这些字符串是DataTable中查询的结果,但我不确定该从哪里去?我误解我应该如何处理这个?
https:// stackoverflow.com。com/questions/913228/should-i-dispose-dataset-and-datatable/1603516#1603516 – user6144226
只有一个查询后400 MB内存?您是否考虑尽量减少从DB获取的数据集? – Piotr
Piotr,不幸的是它不是立即可能的,它是一个有点遗留下来的系统,其中有大量的报告都是以相同的方式设计的。 – IanSoc