2009-04-24 86 views

回答

9

有許多用途。輔助AppDomain可以提供與操作系統提供的進程隔離類似的一定程度的隔離。

我用它的一個實際用途是動態加載「插件」DLL。我想支持在主可執行文件啓動時掃描DLL目錄,加載並檢查它們的類型以查看是否實現了特定的接口(即插件契約)。在不創建輔助AppDomain的情況下,您無法卸載可能沒有實現所尋求接口的任何類型的DLL /程序集。在您的過程中,您可以創建輔助AppDomain,然後在其中加載程序集,然後檢查類型,而不是在您的過程中攜帶額外的程序集和類型等。當你完成後,你可以擺脫輔助AppDomain,因此你的類型。

2

99%的時間我會避免額外的AppDomains。它們本質上是分開的過程。您必須將數據從一個域編組到另一個域,這會增加複雜性和性能問題。

人們試圖使用AppDomains來解決一旦將程序集加載到AppDomain中後無法卸載程序集的問題。因此,您創建了第二個AppDomain,您可以在其中加載動態程序集,然後卸載完整的AppDomain以釋放與程序集關聯的內存。

除非您需要動態加載&卸載組件,它們並不值得擔心。

+1

用於加載類型檢測組件,如插件模型,對他們來說非常有用。所有這一切都是一個額外的啓動時間。 – 2009-04-24 17:58:47

+0

同意,但只有在某些時候要卸載它們,否則沒有任何區別。 此外,對於mot業務應用程序,我不希望他們是必需的。 – Steven 2009-04-24 18:05:21

0

當你必須有一個單例的多個實例時,AppDomains很有用。例如,您有一個程序集爲某些設備實現通信協議,此程序集使用單例。如果你想實例化這個類的多個實例(與多個設備交談),並且你希望這些實例不會互相干擾,那麼AppDomain對於這個目的是完美的。

但是,它確實會使編程變得更加困難,因爲您必須做更多的工作才能跨AppDomain邊界進行通信。

相關問題