题
我正在使用.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代码。
不隶属于 StackOverflow