【问题标题】:Several appdomains calling the same unmanaged dll多个应用程序域调用相同的非托管 dll
【发布时间】:2010-03-25 07:56:54
【问题描述】:

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

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

【问题讨论】:

  • 当你说“加载”时,你的意思是通过LoadLibrary吗?
  • 建议您多说一下配置文件更改的确切情况:它发生了什么变化:您是否暗示您在任意时间间隔创建一个新的应用程序域,然后读取可能已被更改的配置文件由正在进行的应用程序更改?所以任何时候配置文件发生变化,所有用以前的配置文件加载的dll都必须被卸载并重新加载?因此,当通知配置文件已更改时,给定的 'dll 无法重新配置自己?听起来像是一场设计噩梦。
  • Leppie - “加载”我的意思是 LoadLibrary。 BillW - 我同意,这是一个超出我们控制范围的设计噩梦。我们现在需要使用它。每当用户需要在“项目”之间切换时,配置文件就会发生变化(在这种情况下并不重要),并且随时可能发生。

标签: c# .net dll appdomain


【解决方案1】:

我认为非托管 dll 仅由操作系统在每个进程中加载​​一次,因此每个应用程序域都将具有相同的加载实例。要卸载 dll,请使用 FreeLibrary 函数。但是,由于可能有多个应用程序域加载了 dll,因此无法保证来自一个应用程序域的 FreeLibrary 会真正释放/卸载 dll。

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

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 2011-05-26
    • 2010-10-03
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多