告诉我 X509Certificate2 类是线程安全的吗?有条件的话我可以这样用:
public class MyClass
{
// example
private static readonly X509Certificate2 staticCertInstance =
new X509Certificate2("cert.pfx");
// the method can be called from different threads
public void Execute()
{
// use staticCertInstance
}
}
避免每次都创建实例,从而减少GC的负载?
这个对象不能保证线程安全,因为它有一个“handle”方法,它本身就是一个包装器并使用较低级别的函数。
如果您使用的是 .NET 4.6+,您应该将对象包装在 using 语句中以正确处理它,否则您可能会发现将小证书复制到磁盘到多个位置时出现问题。
因此,如果您不确定,请使用“lock”关键字和“using”语句。
根据 此 GitHub 问题:
是不可变的,并且它们的变异成员已经过时了,所以如果我是你我就不会担心。但我不是100%确定。X509Certificates
从技术上讲,有一点可变性:Dispose()。如果在另一个线程处理 X509Cerificate{2} 时正在读取它,则 X509Cerificate{2} 的行为是未定义的。只要您注意在使用时不要丢弃它,我相信从多个线程读取它就可以了。我怀疑已经编写了大量代码来依赖于证书的多线程可读性。
简而言之:只要你不
Dispose
它,跨多个线程重用应该是安全的。