我应该如何管理带有一次性元素的
static
类?有什么经验法则吗?基本上,我应该重构并制作以下
DisposableDataManager
类非- 静态
还是将所有内容留给GC
好吗?
.
public static class DisposableDataManager
{
// ImageList is an 'IDisposable'.
public static ImageList FirstImageList { get; private set; }
public static ImageList SecondImageList { get; private set; }
static DisposableDataManager()
{
FirstImageList = CreateFirstImageList();
SecondImageList = CreateSecondImageList();
}
// ...
}
最佳答案
这实际上取决于处置资源对您的重要性。当您的应用程序关闭时,它打开的所有句柄(文件、网络连接、图形等)都将被释放,所以这不是问题。如果你想处理一个更有序的版本,那就更成问题了——例如在关闭流之前冲洗它。 CLR 会“尽最大努力”在进程退出之前运行终结器,这将在某些情况下依次调用 Dispose
- 但这不是我想要依赖的东西任何重要的事情。
所以在 ImageList
对象的情况下,这真的不应该成为问题。您绝对不会泄漏任何资源 - 操作系统会处理好这一点。
话虽如此,我仍然会尝试重构 - 仅仅是因为全局状态往往不是一个好主意。它使依赖关系变得隐含,并使测试更加困难。在构建时向需要它的每个对象提供相关信息有多难?
(注意:静态变量实际上与 AppDomain
相关联,而不是与整个过程相关联。这使得整个问题在带有 AppDomain
的应用程序中变得更加复杂上下,但我怀疑它与您的场景相关。)
关于c# - 静态一次性元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092529/