我应该如何管理带有一次性物品的课程?有什么经验法则吗?
基本上,我应该重构并创建以下staticDisposableDataManager还是将所有内容都留给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相关,而不是整个过程。这使得整个问题在应用程序中变得更加复杂,在应用程序中,AppDomains会上下移动,但我怀疑它是否与您的场景相关。)

关于c# - 静电一次性物品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12092529/

10-09 03:34