【发布时间】:2014-08-07 03:33:20
【问题描述】:
我有一个长期运行的 Windows 服务,它创建了两个应用程序域。根据应用程序的行为,应用程序域似乎比我想要的更早被丢弃。理想情况下,我希望应用程序域也能长时间运行(除非 Windows 服务关闭,否则基本上永远不会被清理)。有没有办法做到这一点?
我使用调用了两次的工厂方法创建应用程序域(它创建了两种不同类型的对象,每个对象都在自己的应用程序域中),其中包括此代码(为简单起见,删除了 switch 语句)...
AppDomain appDomain = AppDomain.CreateDomain(someVariable.ToString());
return (MyObject) appDomain.CreateInstanceAndUnwrap(
typeof (MyObject).Assembly.FullName,
typeof (MyObject).FullName,
false,
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new object[] {id},
null,
null);
...MyObject 继承自 MarshalByRefObject。
【问题讨论】:
-
也许我已经穿坏了,但应用程序域永远不会自毁,如果它被丢弃,那么你的应用程序必须这样做,你是否持有对应用程序域的引用?如果没有在域上执行代码并且您没有对它的引用,则可能它正在被 GC 收集。
标签: c# .net scope windows-services appdomain