2009-11-02 109 views
3

我有一個現有的使用32位非託管DLL的32位ASP.NET應用程序。是在64位Windows上運行的32位ASP.NET應用程序LARGEADDRESSAWARE

如果我在64位操作系統上運行它,它會自動變爲LARGEADDRESSAWARE(即可以訪問全部4GB的虛擬內存)嗎?

如果不是,我該怎麼做才能使它成爲LARGEADDRESSAWARE?

谷歌搜索出現了this question,但它缺乏上述問題的答案。

EDIT

This blog表明ASP.NET 1.1工作進程LARGEADDRESSAWARE,但沒有提及ASP.NET 2.0:如果一個系統與/ 3GB 開關啓動

在boot.ini中(僅在 企業和數據中心版本 Windows 2000和所有版本的 Windows XP和Windows Server 2003上受支持) 進程與 /LARGEADDRESSAWARE開關可以「看到」 3Gb。 Aspnet_wp.exe在版本1.1中以 的方式鏈接,並且可以採用 的優勢。

EDIT 2

This is another blog這表明,32位ASP.NET應用程序是LARGEADDRESSAWARE,但沒有提到ASP.NET版本:

我們發現的組件被ASP.NET框架託管的 分別利用了> 2演出內存 空間

我必須說我對這方面缺乏權威性的公開信息感到驚訝。

回答

4

我設法訪問運行Windows 2003 SP2的服務器,答案似乎是32位ASP。NET應用程序是LARGEADDRESSAWARE,並且可以訪問全部4GB的虛擬內存。

我通過建立這樣的:

  • 使用 「DUMPBIN /標頭」 檢查w3wp.exe的(32位IIS工作過程)。這表明LARGEADDRESSAWARE位已設置。

  • 運行試圖分配2GB以上虛擬內存的32位ASP.NET應用程序:這是成功的。

我假設結果對於Windows 2008/IIS7是一樣的,但還沒有測試過。

-1

不,它不會。爲了使其能夠識別大量地址,必須將IIS作爲64位應用程序運行(不使用WOW運行)。這意味着您的32位非託管dll將不得不被替換爲它們的64位版本。

通常,當選擇編譯器選項來定位任何平臺(這是默認設置)時,asp.net將轉換爲64位應用程序。您擁有的32位應用程序的問題是存在非託管32位dll。這些不能在64位應用程序中運行。這意味着您必須將您的ASP.NET應用程序作爲32位應用程序運行,這意味着您必須在64位服務器上安裝32位版本的IIS。避免這種情況的唯一方法是將32位非託管dll替換爲專爲在64位環境中運行而設計的dll。 32位應用程序無法使用64位服務器上的所有內存,因此您的應用程序將無法「看見」額外的內存。

ASP.NET應用程序將在64位環境中自行重新編譯(在編譯時爲目標設置任何環境選項),因此它們不再是32位應用程序。

+0

「不,它不會。」 - 謝謝。任何參考資料?有沒有可能改變這一點? – Joe 2009-11-02 15:04:17

+0

我仍在尋找一篇文章。 – kemiller2002 2009-11-02 16:30:39

+0

「爲了使其能夠識別大地址,必須將IIS作爲64位應用程序運行」 - 這是什麼意思?如果它是一個64位應用程序,它將不會在WOW64上運行,並且LARGEADDRESSAWARE不相關。 – Joe 2009-11-02 19:35:12

相關問題