[英]remoting and destructors in c#
我正在使用.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個客戶端斷開了連接,但objcets仍然標記為活動狀態)
您可以使用ITrackingHandler跟蹤對象斷開連接的時間,然后在該點運行Dispose代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.