.NET Framework中哪些托管类分配(或使用)非托管内存?

7

是否有已知(记录)的 .NET 类型集,可以在进程内存的非托管部分分配内存?

例如,微软文档指出 WPF 基础架构为其保留渲染模型分配了非托管内存,以优化性能。还有其他类似的 .NET 框架部分会利用大量的非托管内存吗?

3个回答

5
如果实现了 IDisposable 接口,那么很有可能它拥有非托管数据,或者它拥有一个最终拥有非托管数据的托管类。如果它有 Finalize() 方法,那么它直接拥有非托管数据。
通常来说,如果实现了 IDisposable 接口,那么在使用完毕后应该立即调用 Dispose() 方法。

1
更正为“IDisposable”。此外,更可靠的规则是,如果它实现了终结器,那么它几乎肯定拥有非托管数据。 - bobbymcr
1
确实,大多数 IDisposable 对象并不会(直接)执行任何非托管操作 - 但它们会链接到可能会执行非托管操作的对象。例如,在迭代器块中有一个 IDisposable 对象 - 但没有任何非托管操作。 - Marc Gravell

1
据我所知,没有单一的文档描述或标识框架中使用非托管资源的类。MSDN 对特定类的文档可能会有这样的信息,但那就需要你去查看具体的类。
总的来说,可以肯定的是许多类在某个时候都会使用一些非托管代码。例如,许多 Windows Forms 控件只是 Win32 控件的包装器,因此它们会使用非托管资源。

0

当一个类实现IDisposable接口时,你需要小心。这通常表示使用了非托管资源,不仅限于内存,还可能包括文件句柄、套接字等。

一个很好的指标是当该类使用IntPtr时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接