c# - .NET 中的“托管”资源与“非托管”资源是什么意思?

c# - .NET 中的“托管”资源与“非托管”资源是什么意思?

在问答中什么是非托管资源?1、布鲁斯·伍德发布了以下内容:

我这样想术语“托管”和“非托管”:

“托管”是指 .NET 沙箱中的任何内容。这包括所有 .NET Framework 类。

“非托管”是指 .NET 沙箱之外的荒野。这包括通过调用 Win32 API 函数返回给您的任何内容。

如果您从不调用 Win32 API 函数并且从不取回任何 Win32“句柄”对象,那么您就没有持有任何非托管资源。通过 .NET Framework 类方法打开的文件和流都是托管包装器。

评论:您可能没有直接持有非托管资源。但是,您可能通过诸如System.IO.FileStream之类的托管“包装类”间接持有非托管资源。这样的包装类通常实现IDisposable(直接或通过继承)。

...许多托管(.NET Framework)对象在其中包含非托管资源,您可能希望尽快 Dispose() 处理它们,或者至少为调用者提供这样做的机会。这就是编写自己的 Dispose() 方法的地方。本质上,实现 IDisposable() 为您做了两件事:

允许您摆脱直接从 .NET 背后的操作系统获取的任何资源(非托管资源)。

允许您和您的调用者释放大量的 .NET 对象/.NET 对象,这些对象在您/您的调用者想要立即释放的肮脏的小手中持有宝贵的资源。

注释:通过实现IDisposable并因此提供一种Dispose()方法,您使您的类的用户能够以确定性的方式释放您的类的实例持有的任何非托管资源。

1链接最初在Sachin Shanbhag 的回答中共享。引用的材料日期为 2005-11-17。请注意,我对引用的内容进行了轻微的复制编辑。

相关文章

姜维传BGM
365bet365

姜维传BGM

📅 07-03 👁️ 1313
英雄联盟s14蜘蛛怎么出装
手机版office365破解版

英雄联盟s14蜘蛛怎么出装

📅 07-01 👁️ 4670
什么叫被除数(什么叫被除数和除数的区分)