小编典典

到底什么是非托管资源?

c#

我想了解非托管资源。谁能给我一个基本的想法?


阅读 651

收藏
2020-05-19

共1个答案

小编典典

托管资源基本上是指由垃圾回收器管理的“托管内存”。当您不再对托管对象(使用托管内存)进行任何引用时,垃圾收集器将(最终)为您释放该内存。

那么,非托管资源就是垃圾收集器所不知道的一切。例如:

  • 打开文件
  • 打开网络连接
  • 非托管内存
  • 在XNA中:顶点缓冲区,索引缓冲区,纹理等。

通常, 丢失对管理它们的对象的所有引用 之前,
您要释放这些非托管资源。您可以通过调用Dispose该对象或(使用C#)使用using将为Dispose您处理调用的语句来执行此操作。

如果您Dispose正确地忽略了非托管资源,那么当包含该资源的对象被垃圾回收时,垃圾回收器将最终为您处理(这是“完成”)。但是,由于垃圾收集器不了解非托管资源,因此无法判断释放它们的严重程度-
因此,程序的性能可能很差或完全耗尽了资源。

如果您自己实现一个处理非托管资源的类,则由您自己实现DisposeFinalize正确执行。

2020-05-19