c# - 使用 AppDomains 并行化非线程安全 DLL

标签 c# .net pinvoke parallel-processing appdomain

我有一个非托管 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/

相关文章:

c# - asp.net mvc 从 FormCollection 填充 viewModel

c# - C#-如何删除两个计时器之间的间隔

javascript - 如何从 JScript 或 Testcomplete 调用 Windows API?

c# - 如何将 Byte* 从 C++ 转换为 C# 中的 Byte[]

c# - DllImport 与 ComImport

c# - 自定义引用循环处理

c# - Desc SQL 附近的语法错误,错误显示在 cmd.ExecuteNonQuery() 上

.net - 特性 - NHibernate 与编写自定义对象关系映射器

.net - 递归泛型类型的实例化速度越慢,嵌套越深。为什么?

c# - 将 DataTable 中列的数据类型从 DateTime 更改为 String