c#中的远程处理和析构函数

我正在使用.net远程处理功能,有一些我无法弄清楚,也没有在谷歌找到答案,以及对象处理的工作原理.

我尝试使用远程处理实现某种对象池,因为我列出了基本上是字符串和布尔状态指示符的静态对象.

当我请求一个新的远程对象(在consturctor中)时,我检查一个免费的对象,将其标记为在使用中和在对象的破坏期间. 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个在一段时间后断开连接但是objcets仍然标记为活动状态)

最佳答案 您可以使用
ITrackingHandler跟踪对象断开连接的时间,然后在该点运行Dispose代码.

点赞