永发信息网

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(); // 释放资源 } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯