【问题标题】:What are managed resources and unmanaged resources?什么是托管资源和非托管资源?
【发布时间】:2013-02-02 05:31:31
【问题描述】:

我们应该什么时候进行内存管理以及我​​们如何对这两种类型的资源进行管理? 托管和非托管资源的列表是什么? 我们真的需要担心内存泄漏吗?

【问题讨论】:

    标签: .net


    【解决方案1】:

    托管资源是完全用 .NET 编写的资源。尽管通常不会发生典型的内存泄漏,但仍然可以通过不取消引用未使用的资源来泄漏内存 (the most common reason is to not un-register event handlers)。

    非托管资源通常是那些不是纯 .NET(并且在同一进程中)的资源 - 示例如下:

    • COM 组件
    • 数据库连接/事务
    • 窗把手
    • 文件系统句柄
    • 注册表句柄
    • 网络连接
    • 等等……等等……

    对于这些,您需要执行Dispose pattern, correctly,并确保在使用完后妥善处理。

    我们真的需要担心内存泄漏吗?

    是的,我们确实需要担心它们,尤其是在 .NET 之外时。

    【讨论】:

    • @sly_Chandan - 不正常,不。
    • 我需要处理数据集吗?
    • @sly_Chandan - 一个很好的经验法则 - 如果它实现了 IDisposable,则丢弃它。
    • public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, ISerializable .......它没有实现IDisposable
    • @sly_Chandan - MarshalByValueComponent 实现 IDisposable。继承的魔力。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    相关资源
    最近更新 更多