>如何用一次性物品管理静态课程?有没有经验法则?
>基本上,我应该重构并使以下DisposableDataManager类非
静态还是把所有东西都留给GC呢
>基本上,我应该重构并使以下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相关联,而不是整个进程,这使整个问题在应用程序中更复杂,AppDomains被升高和下降,但我怀疑它与您的场景相关).