AppDomain.Unload 问题
Posted
技术标签:
【中文标题】AppDomain.Unload 问题【英文标题】:AppDomain.Unload issue 【发布时间】:2011-07-06 15:04:30 【问题描述】:当我调用 AppDomain.Unload(name) 方法时,是否会卸载 appdomain。或者它标记下一次垃圾收集。 我有以下情况 应用程序域的集合。列表应用程序 从 ListApp 卸载特定域说 d1 再次卸载 d1 后立即创建域 d1 并将其添加到 ListApp 当我使用 d1.CreateInstanceAndUnwrap() 方法时,它会抛出异常“尝试访问未加载的应用程序域”
public static IDictionary<object, AppDomain> LoadedDomains get; internal set;
private static void Load(object key)
if (!LoadedDomains.Contains(key))
AppDomain domain = AppDomain.CreateDomain("t");
LoadedDomains.Add(key, domain);
private static void UnLoad(object key)
if (LoadedDomains.Contains(key))
AppDomain.Unload(LoadedDomains(key));
LoadedDomains.Remove(key);
private static void Execute()
object key = new object();
Load(key);
Unload(key);
Load(key);
MyObject myobj= LoadedDomains[key].CreateInstance("asName", "type");
【问题讨论】:
当您调用 .Unload 时它会卸载,但我们必须查看您的代码才能找出引发异常的原因。 与您的 AppDomain 问题无关,但您的字典被声明为具有string
键,但您在方法中使用 object
作为键。
修复你的代码以便编译后,它似乎对我有用。
@Mike Two 对不起,这是我的错。
【参考方案1】:
听起来您描述的是多线程问题,而不是垃圾收集问题 - 因为您的代码在卸载域后尝试访问域,但在创建新域并将其分配给多变的。
Unload 同步卸载有问题的 AppDomain,如果无法卸载该域,则会抛出异常。
需要更多代码来进一步协助...
【讨论】:
【参考方案2】:我在我的代码中发现了问题。 卸载域而不刷新字典。
【讨论】:
以上是关于AppDomain.Unload 问题的主要内容,如果未能解决你的问题,请参考以下文章