![](/img/trans.png)
[英]Is it possible to configure a Facebook app to be used across multiple domains?
[英]What are app domains used for?
我大致了解AppDomain是什么,但我並不完全了解AppDomain的用途。
我參與了一個基於服務器的大型C#/ C ++應用程序,我想知道如何使用AppDomains來提高穩定性/安全性/性能。
特別是:
AppDomain的基本用例是在托管第三方代碼的環境中,因此不僅需要動態加載程序集,還需要卸載它們 。
沒有辦法單獨卸載組件。 因此,您必須創建一個單獨的AppDomain來容納可能需要卸載的任何內容。 然后,您可以在必要時刪除並重建整個AppDomain。
順便說一句,破壞堆的本機代碼無法受到CLR的任何功能的保護。 最終,CLR本地實現並共享相同的地址空間。 所以這個過程中的本機代碼可以遍布CLR的內部! 隔離行為不當(即大多數)本機代碼的唯一方法是在OS級別實際進程隔離。 啟動多個.exe進程並讓它們通過某種IPC機制進行通信。
我強烈推薦Jeffrey Richter的CLR Via C# 。 特別是第21章詳細介紹了AppDomains的用途和用途。
在回答你的觀點/問題時:
AppDomains不會保護您的應用程序免受惡意非托管代碼的侵害。 如果這是一個問題,您很可能需要使用操作系統提供的完整進程隔離。
AppDomains之間的通信使用.NET遠程執行來強制隔離。 這可以通過引用編組或按值語義編組,在性能和靈活性之間進行權衡。
AppDomains是一種在托管代碼中實現隔離等過程的輕量級方法。 AppDomains被認為是輕量級的,因為您可以在單個進程中創建多個AppDomain,因此它們可以避免多個OS進程的資源和性能開銷。 此外,單個線程可以在一個AppDomain中執行代碼,然后在另一個AppDomain中執行代碼,因為Windows對AppDomains一無所知(請參閱使用System.AppDomain.CurrentDomain)
其實,這是不正確的,關鍵在一個失敗AppDomain
不能影響別人。 在壞事的情況下,最好還是打破這個過程。 有幾個例子,但老實說我沒有記住它們 - 我只是心理上記下了“糟糕的事情=拆除過程(檢查)”
AppDomain
好處:
AppDomain
; 我將它用於一個基於來自數據庫的數據編譯自身(元編程)的系統 - 它可以啟動一個appdomain來托管新的dll一段時間,然后在新數據可用(並構建)時安全地交換它 AppDomain
之間的通信相對便宜。 IMO這是唯一一次我很樂意使用遠程處理(雖然你仍然需要非常小心邊界上的對象,以避免它們之間出現引用,導致“融合”將額外的dll加載到主AppDomain
,導致泄漏) - 它也很容易 - 只是CreateInstanceAndUnwrap
(或者它是CreateInstanceFromAndUnwrap
?)。 AppDomain
工作的exe,並且設置你需要的任何通信要容易得多 我並不是自稱是AppDomains的專家,所以我的回答並不是無所不包。 也許我應該首先鏈接到一個有點專家的人的精彩介紹,以及覆蓋AppDomain使用的所有方面的內容 。
我自己與AppDomains的主要遭遇是在安全領域。 在那里,我發現的最大優勢是能夠以高信任度運行主域,從而產生具有受限權限的多個子域。 通過限制高信任度的權限,而不使用應用程序域,受限制的進程仍然可以提升自己的權限。
用於運行完全獨立的代碼模塊的App Domain隔離策略,以解決內存共享和穩定性問題,更多的是一種錯覺而非現實。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.