2010-11-09 25 views
5

由於動態程序集加載需要通過appdomain加載來啓用卸載相關appdomain的程序集,因此在要加載的進程中是否存在「最大」數量的appdomains?我正在考慮一個基於服務器的應用程序,每個用戶都可以動態運行他專有的C#代碼。但是,如果說2000個用戶登錄並加載他們的代碼呢?除了appdomians的數量之外,我還可能遇到任何可能的限制嗎?在一個進程中加載​​的應用程序域的最大數量

謝謝。

回答

5

幾乎所有的CLR限制都基於「作爲內存許可」。我知道的唯一例外是一個類的成員數量,限制爲65536.這是基於標記值的定義。沒有像AppDomains那樣的。

+3

ASP.NET不會爲每個請求創建1個「AppDomain」。它基本上是每個ASP.NET網站1個。這個'AppDomain'在很長一段時間內保持活躍狀態​​,儘管有些條件會自動「回收」它。我不確定SQL Server的功能,但是沒有爲每個查詢創建一個新的「AppDomain」。 – 2010-11-10 00:53:11

+0

@bin - 錯誤隔離是關鍵。一旦線程死於未處理的異常,該廣告就是垃圾。它不能是*一個*頁面要求炸彈殺死所有其他併發的炸彈。也許回收那些沒有死的聲音。我不知道確切的規則。 – 2010-11-10 01:19:26

+0

<它不能是一個頁面請求炸彈殺死所有其他併發的頁面> ASP.NET在堆棧上有一個很大的舊嘗試/捕獲高。漏斗到'HttpApplication.Error'事件。如果沒有處理程序,它將顯示默認的500錯誤頁面。如果發生了一些非常糟糕的事情,ASP.NET將回收域,或者整個工作進程可能會重新啓動,但大多數未處理的異常不會導致這些情況。 – 2010-11-10 01:30:26

5

我不認爲在CLR中內置了一個明確的最大值。而是剩下的內存量決定了你是否可以動態加載新的AppDomain。

我會做一些研究,但我不認爲有這樣的價值。

編輯:

Here's另一篇文章可能有助於清楚的事情了。

1

大多數情況下,它將由您的操作系統限制來定義。你的x86機器不能在內存中使用超過4GB的內存[用戶模式下只有2GB]。如果你使用x64,你會有更大的限制。從我所知道的情況來看,您可以創建的應用程序域的數量沒有這種限制。

相關問題