2

是否也可以使用多个 AppDomain 来隔离非托管 dll 中的内存?只是为了澄清一下,如果我有一个使用一些内部静态全局变量的非托管 dll,如果我在不同的应用程序域中加载该非托管 dll 会发生什么?我可以安全地假设 dll 将被加载到不同的地址空间中,以便它们拥有自己的共享数据副本吗?

4

1 回答 1

4

不,那是不可能的。AppDomain 是纯托管的概念。非托管 DLL 状态是进程范围的,并且只能加载一份 DLL 副本。一种可能的技巧是创建具有不同名称的 DLL 文件的副本。然而,它的扩展性很差,而且 pinvoke 很讨厌,必须编写委托并使用 LoadLibrary + GetProcAddress 来绑定它们。

更简洁的替代方法是使用加载 DLL 的单独帮助进程。使用 WCF 等互操作机制与他们交谈。

于 2013-10-09T17:31:30.037 回答