2009-11-06 56 views
0

我有它加載組件到一個AppDomain,然後轉手出去對象代理到其他域的系統(基本上是一個簡單的IoC容器)。我們需要實現非常高的正常運行時間,並且能夠在運行時更新實施可以幫助實現這一目標。如何檢測不存在的AppDomain代理對象離開

我對此沒有任何問題,因爲我可以啓動一個新的appdomain,將新的程序集加載到該程序中,並開始將代理髮送給漂亮的新對象,同時使用舊對象執行代碼。一切都很好,除了在某個時候我想卸載舊的appdomain。

有沒有一種方法來檢查是否所有的代理指向的對象在特定的AppDomain已超出範圍,所以我可以安全地調用卸載不殺死任何長期運行的進程?

回答

1

如果代理是雙向的,它會,如果提供的AppDomain呼籲代理的方法,以確定它是否還活着/主動是最容易。生命週期管理在應用程序域邊界不是解決一個簡單的問題,主要的問題是,你不能保證消費者的AppDomain將正常工作(如參考計數是不是真的要帶好路線,但最明顯的。)然而,如果所有的代理都在同一個進程中,那麼實際上可以依靠GC執行正確的最終化,因此,您可以實現代理,使代理實例上的Finalize()「提供家庭」給提供程序appdomain讓提供者知道代理不再活着。

+0

嗨肖恩, 我一直在考慮這些,但仍然沒有我想要的溫暖自信的感覺。 有一種感覺,我可能只是在一個星期內等待一個可怕的優雅等待,然後把舊的解決方案。 – 2009-11-06 03:36:15