5

如果我继续初始化X509Store证书存储并且不使用他们的Close()方法,这意味着什么?

在文档中给出的代码示例中,他们不使用try..finally块来调用Close方法。如果这个证书存储是需要释放的东西,为什么设计用来派生的类的 API 没有,IDisposable或者为什么这个类没有在对象超出范围时调用隐式析构函数?

4

2 回答 2

15

在 .NET 4.6 中,X509Store已修改并现在实现IDisposable.

Dispose实现正在调用Close().

微软文档

从 .NET Framework 4.6 开始,此类型实现 IDisposable 接口。当您使用完该类型后,您应该直接或间接地处理它。

于 2016-12-20T11:11:15.530 回答
1

在内部,Close 方法释放指向非托管对象的句柄。

public void Close()
{
    if ((this.m_safeCertStoreHandle != null) && !this.m_safeCertStoreHandle.IsClosed)
    {
        this.m_safeCertStoreHandle.Dispose();
    }
}

我宁愿调用 Close 方法来避免内存泄漏。

于 2013-08-27T21:19:30.697 回答