我注意到某些资源在使用或关闭后应予以处理; 关于究竟应该关闭/处置什么,是否有经验法则? 示例 - 当您使用StreamWriter时,您希望在完成后关闭它以避免错误等。什么是绝对应该关闭/处理的内容以及什么时候?
答案 0 :(得分:2)
经验法则是......(鼓槌,窗帘拉回,烟火上升,烟雾消失)
System.IDisposable
哦,你期待一些复杂的事情?抱歉让人失望。
1 对象的具体类型。有时需要运行时检查,例如IEnumerator
实施。
答案 1 :(得分:1)
正如@BenVoigt所说,如果您已经使用该资源,则应该处置IDisposable
。 C#引入了using
关键字,方便开发人员使用:
示例强>:
using (FileStream SourceStream = File.Open("file.ext", FileMode.Open)) {
//do something with the file
}
这个关键字是一种语法方法,可以确保在退出方法等时处理资源。当然,一些资源可以通过多种方法,线程等共享,因此这种语言结构并不总是可用。 / p>
然而,在许多情况下,忘记处理这样的物体并不是那么糟糕。如果程序不再引用它,垃圾收集器最终会走过并自行处理它。但是,如果资源很大(大文件)或使用网络资源(例如:数据库连接),则处置对象是有用的。因为它释放的资源可以被其他程序/用户/客户/ /。。
重用如果对象可以通过多个进程,线程等共享来处理对象很有用,例如文件:比如写入文件,那么其他程序需要等到写入过程结束。但是,如果程序 A 等待进程 B 正在使用的文件,反之亦然,则会发生死锁:两个程序都相互等待但是不要放弃自己的资源。通过尽快处理这些资源,可以防止大多数死锁。