64 ビット Windows 上で実行される 32 ビット ASP.NET アプリです。

StackOverflow https://stackoverflow.com/questions/1661765

  •  12-09-2019
  •  | 
  •  

質問

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

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

そうでない場合、LARGEADDRESSAWARE にするにはどうすればよいですか?

グーグルで出てきた この質問, しかし、上記の質問に対する答えが欠けています。

編集

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

システムがboot.iniの /3GBスイッチで起動されている場合(Windows 2000のエンタープライズおよびデータセンターエディションでのみサポートされている、およびWindows XPおよびWindows Server 2003のすべてのバージョンでのみ)、 /largeaddressawareスイッチCAN CANにリンクされているプロセス」 「3GB」を参照してください。ASPNET_WP.EXEはバージョン1.1でそのようにリンクされており、それを利用できます。

編集2

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

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

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

役に立ちましたか?

解決

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

私はこれを次のようにして確立しました。

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

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

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

他のヒント

いいえ、それはしません。大きなアドレスを認識させるには、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 ビット アプリではなくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top