我有一堆WindowsImpersonationContext
對象,它們是IDisposable
類型。現在考慮這兩個操作:應該手動處理存儲在集合中的IDisposable對象嗎?
Stack<WindowsImpersonationContext> stack = new Stack<WindowsImpersonationContext>();
public void BeginOperation()
{
// Push object to stack
var context = WindowsIdentity.Impersonate(...);
stack.Push(context);
}
public void EndOperation()
{
// Pop object from stack.
if (stack.Count != 0)
{
var context = stack.Pop();
... do various stuff with 'context' ...
context.Dispose(); // should this be called once the object is not needed anymore?
}
}
要我打電話Dispose()
如果手動我不想等待GC做呢?如果我是100%沒有其他代碼會嘗試使用堆棧中引用的對象是否安全?更確切地說,如果我沒有明確地調用context.Dispose()
,我假定即使在執行從EndOperation()
返回後,我仍然處在GC的處置資源的情況下,儘管它沒有被引用不再是堆棧了?我的推理是否正確?
另外,使用上面的代碼,聲稱在執行下面一組操作後,堆棧將根據佔用的資源結束爲空(即,它用於包含的所有對象都放置在最後,我也不需要擔心其他地方處置什麼了):
BeginOperation();
BeginOperation();
EndOperation();
EndOperation();
編輯:我知道using
可以/應該用於安全目的,但主要是我關心的是怎麼回事無論使用哪種語法,收集/ GC的背景...