【发布时间】:2010-11-08 07:53:34
【问题描述】:
我正在使用 .net 远程处理功能,但有些东西我无法弄清楚,也无法在 Google 中找到答案,这就是对象处理的工作原理。
我尝试使用远程处理实现某种对象池,因为我列出了基本上是字符串和布尔状态指示器的静态对象。
当我请求一个新的远程对象时,(在构造函数期间)我检查池中是否有空闲对象,将其标记为正在使用和对象销毁期间。 DismisObject 只是将其标记为“免费”,
public class MyRemotableObject : MarshalByRefObject,IDisposable
{
private AdvancedString obj;
public MyRemotableObject()
{
aso = strCache.GetFreeObject();
}
~MyRemotableObject()
{
Destroy();
}
public void Dispose()
{
Destroy();
}
public void SetMessage(string message)
{
if (obj== null) { obj= strCache.GetFreeObject(); }
obj.str= message;
}
public string GetMessage()
{
return obj.str;
}
void Destroy()
{
if (obj!= null)
{
obj.DismisObject();
obj = null;
}
}
}
超时工作正常 - 经过 5 分钟的现在活动后,当我尝试使用该对象时,我得到了远程处理异常,但 ~MyRemotableObject() 而不是 Dispose() 函数未被调用,因此该对象永远不会在水池。即使我关闭程序 - 对象仍然在池中保持活动状态。释放它的唯一方法是手动调用 Dispose 函数(如果程序崩溃或用户离开是打开的,我不能这样做)
有没有办法强制 .net 在关闭连接时处理/销毁对象? (我在某个地方发现 CG 应该偶尔这样做,所以我打开了 4 个客户端并让 2 个崩溃 - 其他 2 个在一段时间后断开连接,但对象仍然标记为活动)
【问题讨论】:
标签: c# remoting destructor