依赖于非托管资源的常见.NET类

时间:2012-03-12 17:11:13

标签: c# .net memory memory-leaks

我最近在.NET本机加密服务提供程序中遇到了一些内存泄漏问题,因为它依赖于非托管代码。我在SO上遇到的唯一另一件事就是this帖子,但它没有详细介绍,更不用说提供一个好的罪魁祸首了。

是的,如果它实现了IDisposable,它可能会在某处使用一些非托管资源,但我想将一个列表放在一起,通常使用的是特定类,而不是简单地在Intellisense中查找Dispose。

我遇到的那些给我带来麻烦的是:

  • AesCryptoServiceProvider
  • ICryptoTransform的

其他依赖非托管资源的人是谁知道的?是否有任何特别阴险的那些看起来像是完全管理但不是?提前谢谢。

2 个答案:

答案 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方法。