在 .net 框架中包装非线程安全代码的最佳方法是什么?
我有一个第三方库,由于它使用静态变量,它不是线程安全的。重写它不是一种选择。该库由接收大量同时调用的 asp.net Web 服务使用。
我目前已经将它包装在一个代理类中,该类使用锁来确保线程安全:
private static readonly object oneThreadAtATimePlease = new object();
public ISomething CalculateSomething(int someValue)
{
lock (oneThreadAtATimePlease)
{
return new UnsafeLibrary(someValue).DoSomething();
}
}
性能很差,因为多个调用者必须等待锁定,但结果是正确的。
我想通过运行这个库的多个实例来提高性能,每个实例都在自己的 AppDomain 中。这是一个合理的方法吗?有什么好的示例代码可以推荐吗?