61
|
JasonRShaver · 技术社区 · 16 年前 |
![]() |
1
80
是的,这就是它的目的。
假设一个对象实现
如果它没有,那就是一个bug。
不,该代码是处理实现的对象的推荐方法
更优秀的信息在公认的答案中 Close and Dispose - which to call? |
![]() |
2
58
我用反光镜发现
|
![]() |
3
21
正如丹尼尔·布鲁克纳所说,处置和关闭实际上是一回事。 但是,流在释放/关闭时不调用flush()。filestream(我假设任何其他具有缓存机制的流)在释放时都会调用flush()。 如果要扩展流或memoryStream等,则在必要时释放/关闭时需要实现对flush()的调用。 |
![]() |
4
3
streamwriter.dispose()和stream.dispose()都释放了对象持有的所有资源。它们都关闭了底层流。 stream.dispose()的源代码(请注意,这是实现细节,因此不要依赖它):
streamwriter.dispose()(与stream.dispose()相同):
不过,我通常在处理流/流作者之前隐式地关闭它们-我认为它看起来更干净。 |
![]() |
5
3
当关闭/释放时,所有标准流(filestream、cryptostream)都将尝试刷新。我认为对于任何Microsoft流实现,您都可以依赖于此。 因此,如果刷新失败,close/dispose可能会引发异常。 事实上,iirc在.NET 1.0的filestream实现中存在一个错误,因为如果刷新引发异常,它将无法释放文件句柄。通过向Dispose(Boolean)方法添加Try/Finally块,在.NET 1.1中修复了此问题。 |
![]() |
6
3
对于需要手动关闭的对象,应尽一切努力在using块中创建该对象。
这样,就永远不会从using子句的上下文中错误地访问'stream',并且文件总是关闭的。 |
![]() |
7
3
我在.NET源代码中查找了stream类,它包含以下内容,建议您可以…
|
![]() |
8
2
此外,您应该尽量避免显式调用此方法,并使用
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 5 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 5 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 5 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |