即使在导致内存泄漏的程序关闭后,内存泄漏如何仍然存在?

时间:2014-05-12 20:36:37

标签: c# memory-leaks

我有一个C#控制台程序,显然导致内存泄漏。但是除了跟踪内存泄漏的问题之外,真正令人困惑的是,即使程序关闭并且不再显示在任务管理器中,内存泄漏也不会被清除。

这怎么可能?也许这给出了泄漏性质的线索?

证据:此处的任务管理器显示超过24GB的使用情况: enter image description here

与此同时,我的进程没有出现在“进程”选项卡中,并且快速了解其他进程使用的内存量,并结合滚动条的大小显示没有办法这些数字将增加到24 GB: enter image description here

2 个答案:

答案 0 :(得分:3)

它可能是在VM上运行的工件吗?

参见这篇文章:

http://blogs.msdn.com/b/saponsqlserver/archive/2013/08/31/virtualization-overcommitting-memory-and-how-to-detect-it-within-the-vm.aspx

这是对具有动态内存的VM可能发生的事情的另一个更简洁的解释:

http://blog.luxem.org/2013/05/driver-locked-memory-on-hyper-v-guests.html

我自己就遇到过这个问题,直到找到这些博客帖子时才感到很困惑。

答案 1 :(得分:3)

您的系统使用AWE Address Windowing Extensions,它允许您的SQL Server快速操作物理内存。数据库管理系统需要访问大型数据缓存,但由于应用程序的限制为2GB,因此这些DMS从AWE获取内存。

To" fix"这个你必须将max server memory设置为更小的值,这样你的SQL Server就不会使用你所有的内存。