任何人都可以解释为什么 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 级文件句柄形式的托管资源。
想了解 StreamWriter 源代码的哪一部分是非托管代码。已浏览 http://referencesource.microsoft.com/ 网站中的代码。
不过代码好像比较复杂,源码里有很好的注释。但是仍然很难理解,可能是我的知识没有达到那个标准。但是,如果有人有任何博客或文章可以回答这个问题。会很棒的!!!
StreamWriter
不是非托管资源,它是 .NET class,并且是 100% 托管的。
另一个完全不同的事情是 StreamWriter
可能在内部使用非托管资源或拥有一个 IDisposable
对象,而该对象又可能使用非托管资源,或者只是扩展一个 class 实现IDisposable
。
后两个是 StreamWriter
实施 IDisposable
的原因,但请注意,实施 IDisposable
而不是 必然意味着 class直接或间接使用非托管资源。
在StreamWriter
的特殊情况下,很明显它可能会间接消耗未管理的资源;底层流(IDisposable
实例字段 Stream stream
)可能是一个 FileStream
,它显然会消耗非托管资源(例如 HD 中的文件)。但底层流也很可能不使用任何非托管资源,但正如 Stream
提供的那样。
StreamWriter
是托管的,但根据惯例,处置 .NET Stream 对象将始终处置任何基础流。流通常被构造为其他流的容器或包装器。例如,StreamWriter
可能是 FileStream
的包装器(例如,当您使用 System.IO.File.CreateText
创建 StreamWriter
时)。由于 FileStream
使用托管资源,并且您不一定直接引用它,因此能够通过在 StreamWriter
.
FileStream
包含 OS 级文件句柄形式的托管资源。