.net 不使用X509Store.Close方法意味着什么?
如果我一直初始化.net 不使用X509Store.Close方法意味着什么?,.net,x509certificate,x509certificate2,.net,X509certificate,X509certificate2,如果我一直初始化X509Store证书存储,并且不使用它们的方法,这意味着什么 在代码示例中,他们不使用try..finally块调用Close方法。如果需要释放此证书存储,为什么设计用于派生自IDisposable的类的API不释放,或者为什么当对象超出范围时,此类没有调用隐式析构函数?在内部,Close方法释放指向非托管对象的句柄 public void Close() { if ((this.m_safeCertStoreHandle != null) && !th
X509Store
证书存储,并且不使用它们的方法,这意味着什么
在代码示例中,他们不使用
try..finally
块调用Close
方法。如果需要释放此证书存储,为什么设计用于派生自IDisposable
的类的API不释放,或者为什么当对象超出范围时,此类没有调用隐式析构函数?在内部,Close方法释放指向非托管对象的句柄
public void Close()
{
if ((this.m_safeCertStoreHandle != null) && !this.m_safeCertStoreHandle.IsClosed)
{
this.m_safeCertStoreHandle.Dispose();
}
}
我宁愿调用Close方法来避免内存泄漏。在.NET4.6中,
X509Store
被修改,现在实现了IDisposable
Dispose
实现正在调用Close()
发件人:
从.NET Framework 4.6开始,这种类型实现IDisposable接口。使用完该类型后,应直接或间接处置它
他们为什么不在析构函数中这样做,这实际上是我的问题。顺便说一句,您从哪里获得源代码?在.Net中,IDisposable优于析构函数。请参见:我使用Ilspy反编译器获得代码。那么,你认为为什么这个API不是用IDisposable设计的呢?如果不深入了解源代码,我就说不出来了。即使是微软的代码也不是完美的。但对您来说,调用Close()比完全使用或try/finally块要短:-)要确认@Shay关于Dispose调用Close的说法,请参阅