我正在使用.NET远程功能,并且有一些我无法找到的东西,也无法在Google中找到答案,这是对象处置的工作原理。

我尝试通过远程实现某种对象池,因为我已经列出了基本的静态对象,这些对象是字符串和布尔状态指标。

当我请求新的远程对象(持续使用Starturctor)时,我会检查池中免费的对象,将其标记为中等用途,并在对象的破坏过程中。 DissisObject只是将其标记为“免费”,

  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()函数,因此不会在池中标记为免费的对象。即使我关闭程序 - 仍然在池中仍处于活动状态。释放它的唯一方法是手动调用处置函数(例如,如果程序崩溃或用户叶子打开,我不能这样做)

是否有一种方法可以强制.NET关闭连接时处理/破坏对象? (我在某个地方发现CG应该偶尔这样做,所以我打开了4个客户并撞了2个客户 - 其他2次在一段时间后断开了连接,但OBJCETS仍被标记为活动)

有帮助吗?

解决方案

您可能会使用 itrackingHandler 跟踪何时断开对象,然后在此时运行DEPROSE代码。

其他提示

使用在A中实现IDISPOSS的对象 using 尽可能构建。

例如

using (var remotableObj = new MyRemotableObject())
{
    // use it
}

更多信息 这里这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top