我写了一段类似于这篇文章中的例子的代码: .NET Remoting callback (将回调对象传递给远程方法)。
据我所知,如果我没有重写 MarshalByRefObject.InitializeLifetimeService()
一段时间后,服务器调用回调失败。
所以我重写了它以返回 null(无限生命周期)并且它起作用了。
但现在我有点担心垃圾收集:
- 这样的对象会像往常一样被 GC 收集,还是因为被远程处理而保持事件状态?
- 我找到了这个方法:
RemotingServices.Disconnect()
如果我在我的回调对象上调用它,它会保证生命周期策略变得无关紧要并且会被垃圾收集吗?
如果我做对了,我需要专家意见。
谢谢, 吉尔。
附言。我在 .NET 2.0 的约束下工作,因此切换到 WCF 的建议虽然正确,但无关紧要。 :)
最佳答案
好吧,看来这个方法证明了自己。
我通过在 MarshalByRefObject.InitializeLifetimeService()
中返回 null 来使用无限租约。
然后,调用 RemotingServices.Disconnect()
允许正确释放对象。
关于c# - 远程回调对象生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072075/