2010-12-21 42 views
2

NGEN + AppDomain問題在這裏。如何在不指定域中性的情況下將.net本機圖像(NGEN)加載到多個應用程序域中?

我正在處理一些應用程序更改,這些應用程序更改圍繞使本機圖像正確加載以防止在我的.net應用程序中出現可怕的JIT時間。有些部分很容易,但是任何必須在appdomains中加載的程序集(我們的應用程序必須使用的各種原因)只會在第一次加載它們的本地映像,並且在後續加載時(在現在是新的appdomain中)圖像被拒絕併發生JIT。

我知道所有關於域中立加載的知識,並且已經將它用於我們的某些程序集,因爲它是有意義的,但是進行域中立加載會取消首先使用appdomains的主要原因之一對我們來說 - 因爲領域中立的圖像永遠不會被卸載。

簡而言之,我需要一種方法來獲得原生圖像加載和裝配卸載。我曾希望只要在我嘗試重新加載之前卸載了本機映像的第一次使用,就不會適用正常的限制,但這會導致拒絕,就像嘗試同時加載本機映像一樣。

This MSDN article包含以下引號:

的另一種方法落下 回JIT編譯是本機映像 的 不同的副本加載到每一個加載 相應組件 結構域的AppDomain具體。然而,這種方法會要求每個副本 的NGen映像,除了第一個, 從其首選基地址加載到不同的地址 。因此,所有這些副本的NGen圖片 都需要修正其地址。

這對我的需求來說是完美的,但那篇文章是我見過的唯一提到的,我不確定它將如何實現。

在此先感謝您的任何見解,並感謝您的期待。

+0

緊張的*的需要*麻煩。它看起來像「*如果*我們允許這樣做,那麼我們必須修復所有地址,這是非常低效的,所以我們不支持這個。」請致電MSFT。 – 2010-12-22 21:45:22

回答

3

我曾希望正常限制將不是隻要我卸下機映像的第一次使用前,我試圖再次載入應用,但是這導致排斥反應,就像如果試圖加載本地圖像併發。

這可行,但您必須等待本機映像實際上被卸載。當AppDomain.Unload返回時,appdomain未完全卸載。只有在下一次完整的GC之後,appdomain纔會完全卸載(以及本機映像)。

此MSDN文章包含以下報價:

Surupa被猜測是CLR的可能的替代實現,但目前暫不實施。

感謝 Lakshan費爾南多 CLR團隊

相關問題