-2

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

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

4

2 回答 2

3

StreamWriter不是非托管资源,它是一个 .NET 类,它是 100% 托管的。

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

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

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

于 2016-08-22T12:50:39.207 回答
0

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

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

于 2016-08-22T12:59:12.733 回答