如果我有一个静态的WebClient对象,我是否需要在Main()的末尾调用Dispose()?
答案 0 :(得分:5)
当你完成对象时,你应该总是Dispose()
个对象,无论你把对象放在哪里。
如果对象在静态字段中,则可能更难以确定何时完成它。
答案 1 :(得分:2)
作为一般规则,您应该丢弃任何一次性物品。这将允许他们清理任何资源。但是,不能保证在一次性类型上调用dispose - 消费者可以忽略调用它,而CLR不会自动调用它。
如果类型确实需要执行其清理逻辑(例如在分配非托管内存或在文件系统上创建文件堆时),它应该实现一个终结器与处置模式。如果尚未调用CLR(通常是通过处理对象),CLR将在进程退出时调用终结器。是的,有一些警告(例如,糟糕的终结器会破坏其他可终结实例的聚会)但CLR保证至少尝试在进程退出时运行所有终结器。
从技术上讲,我没有任何理由在这种情况下你绝对必须调用dispose方法。但是,这是一个很好的习惯。