【发布时间】:2011-02-23 14:01:32
【问题描述】:
在 asp.net 2.0 生产环境中,我们有一个 aspx 可以查询 SQL2005 数据库的所有类型的查询。有些查询需要一段时间,所以我们添加了一个取消按钮。
在代码中,我们打开连接,然后调用 command.ExecuteReader()。我们将它绑定到一个gridview。
在取消按钮点击我们调用command.Cancel(),处理命令、连接和datareader。并关闭连接。
代码执行后,我在 SQL 分析器中看到查询被取消。但是 w3wp.exe 仍然占用大量内存。
为了测试它,我编写了一个返回大量数据的查询。在 2 秒内我取消了它,我看到内存从 250Mb 增加到几乎 2Gb。一段时间后内存没有减少。
我使用 JetBrains dotTrace Memory 3.5 查看内存的情况。我看到的是 66.6% 的内存正在被 DataBoundControl.PerformSelect 使用。微软表示“在检索数据后调用 PerformDataBinding 方法将数据绑定到数据绑定控件的元素。”但并非所有数据都被检索到,呼叫被取消。发生了什么,为什么没有释放内存?
任何人知道发生了什么或/以及如何解决这个问题?
【问题讨论】:
标签: c# asp.net sql-server-2005 ado.net memory-leaks