2

问题如下。有一个应用程序正在创建其他 AppDomain 并在那里加载程序集(自定义用户脚本)。在主应用程序中,有一些对象,引用这些对象将所有权转移给那些创建的 AppDomain。对象本身是 MarshalByRefObject,它们是禁用的生命周期服务(InitializeLifetimeService 返回 null)。

所有这些都有效。但是,这些 AppDomain 被创建和销毁......由于卸载域引起的破坏,以及对创建对象的引用 - 都被遗忘了。

一般来说,由于逐渐内存结束,因为这些“被遗忘”的对象似乎没有被释放,尽管它​​们在任何地方都没有链接,而且作为链接的 AppDomain 早已被卸载......

因此,问题 - 哪里的错误?怎么了?为什么不卸载域名后豁免设施?

没有人想到- 考虑到自己链接到这些对象的每个域加载,并在他卸载后- 导致每个对象RemotingServices.Disconnect (...)。当终身服务不可用时,它可能必须这样做?

4

1 回答 1

1

我会进行以下更改:

为这些类型实现 IDisposable 和 ISponsor。覆盖这些类型的 InitializeLifetimeService 方法,而不是返回 null,而是让每个实例成为自己的赞助商。

这些类型应该从 Renewal 返回一个正的 TimeSpan,直到它们被释放。只需确保在销毁 appdomain 之前将其处理掉即可。

于 2010-06-19T16:14:55.080 回答