我最近在.NET本机加密服务提供程序中遇到了一些内存泄漏问题,因为它依赖于非托管代码。我在SO上遇到的唯一另一件事就是this帖子,但它没有详细介绍,更不用说提供一个好的罪魁祸首了。
是的,如果它实现了IDisposable,它可能会在某处使用一些非托管资源,但我想将一个列表放在一起,通常使用的是特定类,而不是简单地在Intellisense中查找Dispose。
我遇到的那些给我带来麻烦的是:
其他依赖非托管资源的人是谁知道的?是否有任何特别阴险的那些看起来像是完全管理但不是?提前谢谢。
答案 0 :(得分:5)
这些类的列表将是巨大的。大部分框架都包含本机Windows API调用,因此很多部分都包含本机资源的包装。
这将包括大多数Stream
实现,包含等待句柄的任何内容,大多数网络/套接字实现,以及大多数与UI相关的类(尤其是包装HWND的任何内容)。
答案 1 :(得分:1)
尝试将详尽的列表放在一起似乎毫无意义,基本上你会想要所有实现IDisposable
的类型。
但作为一个阴险的例子,人们常常忘记System.DirectoryServices.SearchResultCollection
class cannot release all of its unmanaged resources when it is garbage collected。要防止内存泄漏,必须在不再需要SearchResultCollection对象时调用Dispose方法。