我有一个非托管 C++ DLL,我的 .NET 应用程序通过 p/invoke 使用它。我需要从这个 DLL 中获取的方法相当耗时,我想并行化这些方法调用。问题在于它使用了一堆静态变量和全局变量,因此它不是线程安全的(并且无法更改)。我的计划是通过从多个 AppDomain 并行调用非托管 DLL 来解决这个非线程安全问题。
我可以从多个 AppDomains 中调用非托管代码,只要我不并行执行,就没有任何问题,但是一旦我并行调用,我就会得到一个 AccessViolationException
.我正在使用 Parallel.For() 进行并行调用。
是否可以通过简单地从多个 AppDomain 进行调用来使非线程安全的非托管 DLL 成为“线程安全的”?
最佳答案
从多个 AppDomain
实例调用 native 方法在这里对您毫无帮助。 AppDomain
边界不适用于 native DLL,它们不会提供任何好处
关于c# - 使用 AppDomains 并行化非线程安全 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6011518/