using 之后,还需要调用 FileStream 的 Close 吗?
答案:4 悬赏:60 手机版
解决时间 2021-02-11 01:47
- 提问者网友:缘字诀
- 2021-02-10 02:25
using 之后,还需要调用 FileStream 的 Close 吗?
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-02-10 03:51
虽然不需要,但是你调用了也没关系,调用Close或者超出了using,资源会被标记为可释放,而不会立即释放,所以调用了也没关系
全部回答
- 1楼网友:英雄的欲望
- 2021-02-10 05:42
我用了 close,运行 visual studio 代码分析说,不应该要这句。到底要不要 close 这句呢?不用因为在 msdn 上已经明确
stream.close 调用 dispose
,如果还需要的话,就相当于调用两次 dispose 了,虽然调用两次不出错,但微软的资深工程师不会这样来架构他的程序。
因为多次调用 close、dispose 方法并不会引发异常。
dipose、close 区别
filestream fs2 = new filestream("c:\\资源没释放.txt", filemode.create); // 在当前程序未结束前,该文件是删除不掉得。
filestream fs3 = new filestream("c:\\close.txt", filemode.create);
fs3.close();
filestream fs4 = new filestream("c:\\dipose.txt", filemode.create);
fs4.dispose();
代码运行完后 close.txt、dispose.txt 的相关资源已经被释放,文件可以被删除,而 资源没释放.txt 由于程序还在运行,资源还没释放,所以不能删除。
为适当释放非托管资源,建议您实现公共的 dispose或close 方法,这两个方法可为对象执行必要的清理代码操作。
”。注意那个“或”字。
另外注意以上针对的是 stream 的资源释放上来说二者是等效的,但对于其他对象的其他应用就不同了,比如 sqlconnection 的 close 是指关闭连接,还可以用 open 再打开,dispose 就不行了。
- 2楼网友:平生事
- 2021-02-10 04:18
不需要,using范围内就已经释放了
- 3楼网友:怀裏藏嬌
- 2021-02-10 04:04
如果是在using语句块中定义使用FileStream, 你其实是可以省略显式Close方法调用。
原因:
using语句其实本质上是一个Try/Catch语句块,而FileStream类实现了Dispose模式,编译器会自动为你在Try/Catch语句块的Finally中调用Dispose方法释放FileStream对象所占用的非托管资源。
比如:
using (FileStream fs= new FileStream()))
{
// DoSomething
}
实际上最后编译好的代码:
{
FileStream fs= new FileStream();
try
{
// DoSomething
}
finally
{
if (fs != null)
((IDisposable)fs).Dispose(); // 释放资源
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯