如果我不断初始化X509Store
证书商店并且不使用他们的Close()
方法,那么这意味着什么呢?
在代码示例given in documentation中,他们不使用try..finally
块来调用Close
方法。如果这个证书存储是需要释放的东西,那么为什么这个类的API不能从IDisposable
派生,或者为什么这个类没有在对象超出范围时调用的隐式析构函数?
答案 0 :(得分:8)
在.NET 4.6中,X509Store
已被修改,现在正在实施IDisposable
。
Dispose
实施正在调用Close()
。
来自MSDN:
从.NET Framework 4.6开始,此类型实现IDisposable接口。使用完该类型后,应直接或间接处理。
答案 1 :(得分:1)
在内部,Close方法释放指向非托管对象的句柄。
public void Close()
{
if ((this.m_safeCertStoreHandle != null) && !this.m_safeCertStoreHandle.IsClosed)
{
this.m_safeCertStoreHandle.Dispose();
}
}
我宁愿调用Close方法来避免内存泄漏。