几个appdomains调用相同的非托管DLL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几个appdomains调用相同的非托管DLL相关的知识,希望对你有一定的参考价值。

我们的.NET 3.5 C#应用程序创建了多个appdomains。每个appdomain加载相同的非托管第三方dll。此dll在初始化时读取配置文件。如果配置在运行时更改,则必须卸载并再次加载dll。这个dll不在我们的范围内,无法正确重写。

每个appdomain是否可以访问此非托管dll的separtate副本,或者Windows是否保留dll的一个副本并维护使用计数?如果是后者,那么我们如何让非托管dll的每个实例反映其独特的配置?

答案

看一下这篇博文

Explanation of Processes and AppDomains

另一答案

我认为操作系统每个进程只加载一次非托管dll,因此每个app-domain都会有相同的加载实例。要卸载DLL,请使用FreeLibrary函数。但是,由于多个app-domains可能已加载dll,因此无法保证来自一个app-domain的FreeLibrary将实际释放/卸载dll。

正如BillW所说,这对我来说似乎也是一场设计梦魇!

以上是关于几个appdomains调用相同的非托管DLL的主要内容,如果未能解决你的问题,请参考以下文章

我可以在我的 IIS 托管网站中跨 AppDomain 共享 dll 吗?

CLR via C#读书笔记 CLR寄宿和AppDomain

从不同的 AppDomain 调用 SignalR 方法

调用使用 C# 返回结构数组的非托管 dll 函数

如果我将两个应用程序加载到同一个 AppDomain 中,我可以与另一个托管应用程序交互吗?

从 C# 线程调用非托管代码