我应该如何管理带有一次性物品的课程?有什么经验法则吗?
基本上,我应该重构并创建以下static
类DisposableDataManager
还是将所有内容都留给non-static
好?
.
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“尽最大努力”在进程退出之前运行finalizer,在某些情况下,它将依次调用Dispose
,但这不是我想要依赖的重要功能。
所以在ImageList
对象的情况下,这真的不应该是个问题。你绝对不会泄露任何资源-操作系统会处理的。
尽管如此,我还是会尝试重构——仅仅因为全局状态往往是个坏主意。它使依赖关系隐式化,并且测试更加困难。在施工时向每个需要的对象提供相关信息有多难?
(注意:静态变量实际上与AppDomain
相关,而不是整个过程。这使得整个问题在应用程序中变得更加复杂,在应用程序中,AppDomain
s会上下移动,但我怀疑它是否与您的场景相关。)
关于c# - 静电一次性物品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12092529/