【问题标题】:Which managed classes in .NET Framework allocate (or use) unmanaged memory?.NET Framework 中的哪些托管类分配(或使用)非托管内存?
【发布时间】:2010-12-03 16:19:02
【问题描述】:

是否有一组已知(记录在案)的 .NET 类型在进程内存的非托管部分分配内存?

例如,Microsoft 记录了 WPF 基础结构为其保留的呈现模型分配非托管内存以优化性能。 .NET 框架中是否还有其他此类使用大量非托管内存的部分?

【问题讨论】:

    标签: c# .net memory-management unmanaged


    【解决方案1】:

    如果它实现了IDisposable,那么它很有可能拥有非托管数据,或者它拥有一个最终拥有非托管数据的托管类。如果它有Finalize(),则表明它直接拥有非托管数据。

    根据经验,如果它实现了IDisposable,那么在你完成后就立即实现Dispose()

    【讨论】:

    • 更正为“IDisposable”。此外,更可靠的规则是,如果它实现了终结器,则几乎可以肯定它拥有非托管数据。
    • 确实 - 大多数IDisposable 项目(直接)做任何不受管理的事情 - 但它们链接到某些可能。例如,迭代器块中有一个IDisposable - 但没有任何非托管的。
    【解决方案2】:

    据我所知,没有单独的文档描述或标识框架中的哪些类使用非托管资源。特定类的 MSDN 文档可能会,但这需要您查看特定类。

    总的来说,可以肯定的是,许多类在某些时候会使用一些非托管代码。例如,许多 Windows 窗体控件只是 Win32 控件的包装器,因此它们使用非托管资源。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 2020-07-11
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多