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)
我看到以下问题:
在应用程序的运行时期间从地图中删除对象不会丢弃它.您必须手动执行此操作.替换地图中的对象也是如此.
更新:
以下将留下未曝光的对象:
_map[key] = new DisposableObject();
Run Code Online (Sandbox Code Playgroud)
以前识别的对象key永远不会被处理掉.
关于整个概念:
它没有多大意义..NET运行时会在应用程序退出时释放所有内存.因此,IDisposable只要应用程序本身似乎不需要就实现对象,除非它们持有对非托管资源(如打开文件句柄)的引用.