【发布时间】:2010-12-03 16:19:02
【问题描述】:
是否有一组已知(记录在案)的 .NET 类型在进程内存的非托管部分分配内存?
例如,Microsoft 记录了 WPF 基础结构为其保留的呈现模型分配非托管内存以优化性能。 .NET 框架中是否还有其他此类使用大量非托管内存的部分?
【问题讨论】:
标签: c# .net memory-management unmanaged
是否有一组已知(记录在案)的 .NET 类型在进程内存的非托管部分分配内存?
例如,Microsoft 记录了 WPF 基础结构为其保留的呈现模型分配非托管内存以优化性能。 .NET 框架中是否还有其他此类使用大量非托管内存的部分?
【问题讨论】:
标签: c# .net memory-management unmanaged
如果它实现了IDisposable,那么它很有可能拥有非托管数据,或者它拥有一个最终拥有非托管数据的托管类。如果它有Finalize(),则表明它直接拥有非托管数据。
根据经验,如果它实现了IDisposable,那么在你完成后就立即实现Dispose()。
【讨论】:
IDisposable 项目不(直接)做任何不受管理的事情 - 但它们链接到某些可能。例如,迭代器块中有一个IDisposable - 但没有任何非托管的。
据我所知,没有单独的文档描述或标识框架中的哪些类使用非托管资源。特定类的 MSDN 文档可能会,但这需要您查看特定类。
总的来说,可以肯定的是,许多类在某些时候会使用一些非托管代码。例如,许多 Windows 窗体控件只是 Win32 控件的包装器,因此它们使用非托管资源。
【讨论】:
当类实现 IDisposable 时需要小心。这通常表示使用了非托管资源,但不仅限于内存,还可能是文件句柄、套接字等。
一个很好的指标是当类使用IntPtr。
【讨论】: