不使用X509Store.Close方法的含义是什么?

Ahm*_*gle 2 .net x509certificate2 x509certificate

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

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

Sha*_*hay 10

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

Dispose实现调用Close().

来自MSDN:

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

  • 要确认 @Shay 关于 Dispose 调用 Close 的说法,请参阅 https://referencesource.microsoft.com/#System/security/system/security/cryptography/x509/x509store.cs,5f32dc1ea67a9cb7 (3认同)

Osc*_*car 1

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

public void Close()
{
    if ((this.m_safeCertStoreHandle != null) && !this.m_safeCertStoreHandle.IsClosed)
    {
        this.m_safeCertStoreHandle.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

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