【发布时间】:2011-05-15 21:52:26
【问题描述】:
我有一个非托管 C++ DLL,我的 .NET 应用程序通过 p/invoke 使用它。我需要来自这个 DLL 的方法相当耗时,我想并行化方法调用。问题是它使用了一堆静态变量和全局变量,因此它不是线程安全的(并且无法更改)。我的计划是通过从多个 AppDomain 并行调用非托管 DLL 来克服这个非线程安全问题。
只要我不并行调用,我就可以毫无问题地从多个 AppDomain 调用非托管代码,但是一旦并行调用,我就会得到一个AccessViolationException。我正在使用 Parallel.For() 进行并行调用。
是否可以通过简单地从多个 AppDomain 进行调用来使非线程安全的非托管 DLL “线程安全”?
【问题讨论】:
-
对于不能很好地使用多线程的非托管 DLL,恕我直言,进程隔离比 appdomains容易得多。
标签: c# .net pinvoke parallel-processing appdomain