任何人都可以解释为什么 StreamWriter 是一种非托管资源。

Can any one explain why StreamWriter is an Unmanaged Resource.

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

不过代码好像比较复杂,源码里有很好的注释。但是仍然很难理解,可能是我的知识没有达到那个标准。但是,如果有人有任何博客或文章可以回答这个问题。会很棒的!!!

StreamWriter 不是非托管资源,它是 .NET class,并且是 100% 托管的。

另一个完全不同的事情是 StreamWriter 可能在内部使用非托管资源或拥有一个 IDisposable 对象,而该对象又可能使用非托管资源,或者只是扩展一个 class 实现IDisposable

后两个是 StreamWriter 实施 IDisposable 的原因,但请注意,实施 IDisposable 而不是 必然意味着 class直接或间接使用非托管资源。

StreamWriter的特殊情况下,很明显它可能会间接消耗未管理的资源;底层流(IDisposable 实例字段 Stream stream)可能是一个 FileStream,它显然会消耗非托管资源(例如 HD 中的文件)。但底层流也很可能不使用任何非托管资源,但正如 correctly points out in commentaries below, all streams must implement a consistent interface which the abstract class Stream 提供的那样。

StreamWriter 是托管的,但根据惯例,处置 .NET Stream 对象将始终处置任何基础流。流通常被构造为其他流的容器或包装器。例如,StreamWriter 可能是 FileStream 的包装器(例如,当您使用 System.IO.File.CreateText 创建 StreamWriter 时)。由于 FileStream 使用托管资源,并且您不一定直接引用它,因此能够通过在 StreamWriter.

上调用 Dispose() 来处理它很重要

FileStream 包含 OS 级文件句柄形式的托管资源。