经过一番阅读,我发现您在 C# 中编写的所有代码都是托管代码,不应该造成内存泄漏。然而,我的程序的行为方式暗示了某种内存泄漏。
我的整个程序归结为:( 目前我没有实际的代码)
while(true)
{
//Source of the "leak"
List<object> _objects = ReturnAllWindows();
//Do something awesome with the list...
System.Threading.Thread.Sleep(10);
}
ReturnAllWindows
是一种pinvoke
结合使用user32.dll
并EnumWindows
获取当前打开的所有窗口的方法。
当我运行我的程序时,内存立即飙升,直到我得到一个OutOfMemoryException
.
根据我的阅读,我唯一能想到的是函数中存在某种内存泄漏EnumWindows
,但我很难想象 user32 没有得到完全管理。
那么发生了什么?我该如何预防/解决它?
编辑: 解决了,问题是这个列表后来与一些未正确处理的多线程结合使用。如果您评论该
ReturnAllWindows
行,则从未达到多线程,平台调用根本不是问题。