静态IDisposable字典模式

fea*_*net 2 c# design-patterns idisposable

我在Web应用程序中遇到如下情况.我只想检查它是一个好模式.可能发生的事情意味着我的字典是腐败的(有些成员被处置,有些成员没有,例如)?我是否正确实施了这个想法?

static IDictionary<string, IDisposable>() _map;

Application_Start()
{
    if (_map == null)
    {
         _map = new IDictionary<string, IDisposable>();
         _map.Add(...);
         _map.Add(...);
    }
}

Application_End
{
    if (_map != null)
    {
        foreach (var m in _map)
        {
            m.Value.Dispose();
        }
        _map = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 5

我看到以下问题:
在应用程序的运行时期间从地图中删除对象不会丢弃它.您必须手动执行此操作.替换地图中的对象也是如此.

更新:
以下将留下未曝光的对象:

_map[key] = new DisposableObject();
Run Code Online (Sandbox Code Playgroud)

以前识别的对象key永远不会被处理掉.

关于整个概念:
它没有多大意义..NET运行时会在应用程序退出时释放所有内存.因此,IDisposable只要应用程序本身似乎不需要就实现对象,除非它们持有对非托管资源(如打开文件句柄)的引用.