几个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