如果我继续初始化X509Store
证书存储并且不使用他们的Close()
方法,这意味着什么?
在文档中给出的代码示例中,他们不使用try..finally
块来调用Close
方法。如果这个证书存储是需要释放的东西,为什么设计用来派生的类的 API 没有,IDisposable
或者为什么这个类没有在对象超出范围时调用隐式析构函数?
在 .NET 4.6 中,X509Store
已修改并现在实现IDisposable
.
该Dispose
实现正在调用Close()
.
从微软文档:
从 .NET Framework 4.6 开始,此类型实现 IDisposable 接口。当您使用完该类型后,您应该直接或间接地处理它。
在内部,Close 方法释放指向非托管对象的句柄。
public void Close()
{
if ((this.m_safeCertStoreHandle != null) && !this.m_safeCertStoreHandle.IsClosed)
{
this.m_safeCertStoreHandle.Dispose();
}
}
我宁愿调用 Close 方法来避免内存泄漏。