【发布时间】:2014-10-07 06:06:26
【问题描述】:
我有一个在 IIS 下运行的应用程序,该应用程序具有三个程序集:托管程序集、混合程序集和本机 dll。
托管程序集公开了一个单例对象 MaS,该对象通过混合单例 MiS (C++/CLI) 包装了本机单例 NaS。
问题
当 IIS 回收应用程序池时,托管单例 MaS 似乎消失了,它的程序集从 APPDOMAIN 中卸载,混合的 MiS 也是如此。然而,原生单例NaS 仍然存在并且不会被破坏。这在我的情况下是有问题的,因为当应用程序被回收并再次加载时,托管单例,现在 MaS1 会因为它在内存中找到一个已经存在的本机单例 NaS 而感到困惑。
问题
在应用程序池回收时如何处理本机 dll?他们会被卸载吗?
【问题讨论】:
-
我不希望非 COM 原生对象被神奇地破坏,因为一些技术上不相关的“管理程序集”在 AppDomain 回收时被卸载。显然,进程内对象将在 AppPool(进程)回收时被销毁......这与你的观察相矛盾,让我完全困惑......
-
@AlexeiLevenkov 完全同意你的看法!我认为将这些邪恶的二进制文件称为程序集是对 .NET 的不尊重。会更新我的帖子。谢谢
-
@AlexeiLevenkov 没错!所有托管对象都被销毁,本地对象保留在内存中并且不会被销毁:(
标签: c# .net iis .net-assembly