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

时间:2016-08-22 12:45:12

标签: c# system.io.file unmanagedresources

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

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

2 个答案:

答案 0 :(得分:2)

StreamWriter不是一个无人管理的资源,它是一个.NET类,它是100%管理的。

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

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

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

答案 1 :(得分:0)

管理

StreamWriter,但是处理.NET Stream对象的约定总是处理任何底层流。流通常被构造为围绕其他流的容器或包装器。例如,FileStream可能是StreamWriter的包装(例如,当您使用System.IO.File.CreateText创建FileStream时)。由于StreamWriter使用托管资源,并且您不一定直接引用它,因此能够通过调用FileStream上的Dispose()来处置它非常重要。

if now-timedelta(hours=24) <= set_date <= now: ... #date less than 24 hours in the past 包含操作系统级文件句柄形式的托管资源。

相关问题