我是相當新的反思,我想知道我會用(第二)AppDomain的?在商業應用程序中會有什麼實際應用?我什麼時候可以使用AppDomain?
7
A
回答
9
有許多用途。輔助AppDomain可以提供與操作系統提供的進程隔離類似的一定程度的隔離。
我用它的一個實際用途是動態加載「插件」DLL。我想支持在主可執行文件啓動時掃描DLL目錄,加載並檢查它們的類型以查看是否實現了特定的接口(即插件契約)。在不創建輔助AppDomain的情況下,您無法卸載可能沒有實現所尋求接口的任何類型的DLL /程序集。在您的過程中,您可以創建輔助AppDomain,然後在其中加載程序集,然後檢查類型,而不是在您的過程中攜帶額外的程序集和類型等。當你完成後,你可以擺脫輔助AppDomain,因此你的類型。
2
99%的時間我會避免額外的AppDomains。它們本質上是分開的過程。您必須將數據從一個域編組到另一個域,這會增加複雜性和性能問題。
人們試圖使用AppDomains來解決一旦將程序集加載到AppDomain中後無法卸載程序集的問題。因此,您創建了第二個AppDomain,您可以在其中加載動態程序集,然後卸載完整的AppDomain以釋放與程序集關聯的內存。
除非您需要動態加載&卸載組件,它們並不值得擔心。
0
當你必須有一個單例的多個實例時,AppDomains很有用。例如,您有一個程序集爲某些設備實現通信協議,此程序集使用單例。如果你想實例化這個類的多個實例(與多個設備交談),並且你希望這些實例不會互相干擾,那麼AppDomain對於這個目的是完美的。
但是,它確實會使編程變得更加困難,因爲您必須做更多的工作才能跨AppDomain邊界進行通信。
相關問題
- 1. 什麼是BigInteger,我們什麼時候可以使用它?
- 2. 你什麼時候可以使用uint_least16_t
- 3. 什麼時候可以使用filter_input()
- 4. 什麼時候可以使用IORef?
- 5. Twisted,gevent eventlet - 我什麼時候可以使用它們
- 6. 在Java中,我什麼時候可以通過sparseArray使用ArrayList?
- 7. 什麼時候我們可以使用Oracle外部表
- 8. 多線程:我什麼時候可以使用Join?
- 9. 什麼時候可以使用我自己的RouteHandler?
- 10. 什麼時候可以調用BarcodeScanner.GetDefaultAsync()?
- 11. 什麼時候應該使用可可?
- 12. JDBC:我什麼時候可以關閉什麼
- 13. R的class.ind()函數做什麼?我什麼時候可以使用它?
- 14. 什麼時候DataView可用?
- 15. 什麼時候應該使用AWS,什麼時候不使用
- 16. intn_t什麼時候使用它,什麼時候不使用
- 17. 什麼時候使用__proto__和什麼時候使用原型
- 18. 什麼時候使用Ruby和什麼時候使用PHP
- 19. 什麼時候可以ManualResetEvent.Set()返回false?
- 20. 什麼時候可以捕獲RuntimeException
- 21. 什麼時候可以ValidatorUtils.getValueAsString()返回null?
- 22. TDD。什麼時候可以繼續?
- 23. 我什麼時候需要使用「android:id」?
- 24. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 25. 我什麼時候需要使用@WebServiceRef?
- 26. 我什麼時候使用CFRelease?
- 27. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 28. Android:我們什麼時候使用getIntent()?
- 29. 我什麼時候使用wordpress
- 30. C#:什麼時候使用waitHandle,當我們可以使用threadPool屬性
用於加載類型檢測組件,如插件模型,對他們來說非常有用。所有這一切都是一個額外的啓動時間。 – 2009-04-24 17:58:47
同意,但只有在某些時候要卸載它們,否則沒有任何區別。 此外,對於mot業務應用程序,我不希望他們是必需的。 – Steven 2009-04-24 18:05:21