3

32 ビット アンマネージ DLL を使用する既存の 32 ビット ASP.NET アプリケーションがあります。

これを 64 ビット OS で実行すると、自動的に LARGEADDRESSAWARE になりますか (つまり、4GB の仮想メモリ全体にアクセスできますか)?

そうでない場合、LARGEADDRESSAWAREにするために何ができますか?

グーグルはこの質問を見つけましたが、上記の質問に対する答えがありません.

編集

このブログは、ASP.NET 1.1 ワーカー プロセスが LARGEADDRESSAWARE であることを示唆していますが、ASP.NET 2.0 については沈黙しています。

boot.ini で /3Gb スイッチを使用してシステムを起動すると (Windows 2000 の Enterprise および Data Center エディション、および Windows XP と Windows Server 2003 のすべてのバージョンでのみサポートされます)、/LARGEADDRESSAWARE スイッチにリンクされたプロセスは、" 「3Gb」を参照してください。Aspnet_wp.exe はバージョン 1.1 でそのようにリンクされており、それを利用できます。

編集2

これは、32 ビットの ASP.NET アプリが LARGEADDRESSAWARE であることを示唆している別のブログですが、ASP.NET のバージョンについては言及していません。

ASP.NET フレームワークによってホストされたコンポーネントが、2 ギガを超えるメモリ スペースを利用していることがわかりました。

私は、この主題に関する信頼できる公開情報が不足していることに驚いていると言わざるを得ません。

4

2 に答える 2

4

Windows 2003 SP2 を実行しているサーバーにアクセスできました。答えはイエスのようです。32 ビット ASP.NET アプリケーションは LARGEADDRESSAWARE であり、4 GB の仮想メモリ全体にアクセスできます。

私はこれを確立しました:

  • 「dumpbin /headers」を使用して w3wp.exe (32 ビット IIS ワーカー プロセス) を調べます。これは、LARGEADDRESSAWARE ビットがセットされていることを示しています。

  • 2GB を超える仮想メモリを割り当てようとする 32 ビット ASP.NET アプリケーションの実行: これは成功しました。

Windows 2008 / IIS7 でも同じ結果になると思いますが、テストしていません。

于 2009-11-03T12:49:21.167 に答える
-1

いいえ、それはしません。大きなアドレスを認識できるようにするには、IIS を 64 ビット アプリケーションとして実行する必要があります (WOW を使用して実行するのではありません)。これは、32 ビットの管理されていない dll を 64 ビット バージョンに置き換える必要があることを意味します。

通常、asp.net は、任意のプラットフォームを対象とするコンパイラ オプションを選択すると (デフォルト)、64 ビット アプリケーションに変換されます。使用している 32 ビット アプリの問題は、管理されていない 32 ビット dll があることです。これらは 64 ビット アプリケーションでは実行できません。これは、ASP.NET アプリケーションを 32 ビット アプリケーションとして実行する必要があることを意味します。つまり、32 ビット バージョンの IIS を 64 ビット サーバーにインストールする必要があります。これを回避する唯一の方法は、32 ビットの管理されていない dll を、64 ビット環境で実行するように設計されたものに置き換えることです。32 ビット アプリケーションは 64 ビット サーバーのすべてのメモリを使用できるわけではないため、アプリケーションは追加メモリを「見る」ことができません。

ASP.NET アプリは 64 ビット環境で再コンパイルされるため (コンパイル時にターゲットの環境オプションが設定されている場合)、32 ビット アプリではなくなります。

于 2009-11-02T14:59:18.867 に答える