远程处理回调对象生存期

本文关键字:回调 对象 生存期 处理 程处理 | 更新日期: 2023-09-27 18:37:24

我写了一段类似于这篇文章中的例子的代码:.NET 远程处理回调(将回调对象传递给远程方法)。

正如我发现的那样,如果我不覆盖MarshalByRefObject.InitializeLifetimeService()一段时间后,服务器调用回调失败。所以我覆盖了它以返回 null(无限生存期)并且它可以工作。

但现在我有点担心垃圾收集:

  1. 这样的对象会像往常一样被 GC 收集,还是因为它被远程处理而保持活动状态?
  2. 我找到了这种方法:RemotingServices.Disconnect()

如果我在我的回调对象上调用它,它是否会保证生命周期策略变得无关紧要并且会被垃圾回收?

如果我做得对,我想要专家意见。

谢谢吉尔。

附言。我在 .NET 2.0 的约束下工作,因此切换到 WCF 的建议虽然正确,但无关紧要。:)

远程处理回调对象生存期

好的,似乎这种方法证明了自己。

我通过在 MarshalByRefObject.InitializeLifetimeService() 中返回 null 来使用无限租约。
然后,调用 RemotingServices.Disconnect() 允许正确释放对象。

如果重写 InitializeLifetimeService 并返回 null,则对象将永远不会被垃圾回收。

如果您不希望您的实例永远存在,则需要进入发起人和租约 - 基本上,当 .NET 即将使租约过期并 GC 对象时,您会收到一个回调,让您有机会续订租约。

有关赞助和租赁的良好概述,请参阅 http://msdn.microsoft.com/en-us/magazine/cc300474.aspx。