有人能解释为什么StreamWriter是一个非托管资源吗?

本文关键字:一个 资源 为什么 能解释 StreamWriter | 更新日期: 2023-09-27 18:03:21

想了解StreamWriter源代码的哪一部分是非托管代码。已经浏览了http://referencesource.microsoft.com/网站的代码

但是这似乎是复杂的代码理解,源代码中有很好的注释。但还是过了一段艰难的时间才明白,可能是我的知识还没有达到那个标准。然而,如果有人有任何博客或文章可以回答这个问题。那会很棒的!!

有人能解释为什么StreamWriter是一个非托管资源吗?

StreamWriter不是一个未管理的资源,它是一个。net类,并且它是100%管理的。

另一个完全不同的事情是StreamWriter可能在内部使用非托管资源或拥有一个IDisposable对象,该对象反过来可能使用非托管资源,或者简单地扩展一个实现IDisposable的类。

后两个是StreamWriter实现IDisposable的原因,但要注意,实现IDisposable并不一定意味着该类直接或间接地使用非托管资源。

StreamWriter的特殊情况下,很明显,它可能间接地消耗未管理的资源;底层流(IDisposable实例字段Stream stream)可能是FileStream,它显然消耗非托管资源(例如,HD中的文件)。但也有可能底层流不使用任何非托管资源,但正如Colin Mackay在下面的注释中正确指出的那样,所有流必须实现抽象类Stream提供的一致接口。

StreamWriter是受管理的,但它是一个约定,处置。net流对象将始终处置任何底层流。流通常被构造为其他流的容器或包装器。例如,StreamWriter可能是FileStream的包装器(例如,当您使用System.IO.File.CreateText创建StreamWriter时)。由于FileStream使用托管资源,并且您不一定有对它的直接引用,因此能够通过在StreamWriter上调用dispose()来释放它是很重要的。

FileStream以操作系统级文件句柄的形式包含托管资源。