我是否需要在静态对象上调用Dispose()?

时间:2011-06-05 19:31:33

标签: c# static dispose

如果我有一个静态的WebClient对象,我是否需要在Main()的末尾调用Dispose()?

2 个答案:

答案 0 :(得分:5)

当你完成对象时,你应该总是Dispose()个对象,无论你把对象放在哪里。

如果对象在静态字段中,则可能更难以确定何时完成它。

答案 1 :(得分:2)

作为一般规则,您应该丢弃任何一次性物品。这将允许他们清理任何资源。但是,不能保证在一次性类型上调用dispose - 消费者可以忽略调用它,而CLR不会自动调用它。

如果类型确实需要执行其清理逻辑(例如在分配非托管内存或在文件系统上创建文件堆时),它应该实现一个终结器与处置模式。如果尚未调用CLR(通常是通过处理对象),CLR将在进程退出时调用终结器。是的,有一些警告(例如,糟糕的终结器会破坏其他可终结实例的聚会)但CLR保证至少尝试在进程退出时运行所有终结器。

从技术上讲,我没有任何理由在这种情况下你绝对必须调用dispose方法。但是,这是一个很好的习惯。