web-dev-qa-db-ja.com

IISで32ビットアプリケーションプールがより効率的なのはなぜですか?

IISで2つの異なるASP.NET Webアプリケーションを使用して負荷テストを実行しています。テストは、5、10、25、および250のユーザーエージェントで実行されます。 8 GB RAM、Windows 7 Ultimate x64を搭載したボックスでテスト済み。 IISと負荷テストプロジェクトの両方を実行する同じボックス。

私は何度も実行しましたが、データは非常に一貫しています。アプリケーションプールで[32ビットアプリケーションを有効にする]をTrueに設定している場合、すべてのロードで、 "平均ページ時間(秒)"と "平均応答時間(秒)"が低くなります。負荷が高くなるほど、違いは顕著になります。非常に高い負荷では、アプリケーションプールが64ビットの場合、Webアプリケーションはエラー(503)をスローし始めますが、32ビットに設定されている場合は、それを維持できます。

32ビットアプリプールの方がはるかに効率的なのはなぜですか?アプリケーションプールのデフォルトが32ビットではないのはなぜですか?

12
mhenry1384

64ビットのメモリポインタとその他の関連データ構造は、32ビットのメモリポインタの2倍です。さらに、64ビットワーカースレッドは、モードを切り替えるときに32ビットコードまたはDLLにアクセスする必要があるたびにペナルティが発生します。 (WoW64とサンクの研究。)

64ビットを使用する最大の(ただし唯一ではない)利点は、アドレス指定機能はるかより多くのメモリです。アプリプールが2ギガバイトまたは3ギガバイトを超えるメモリを使用せず、特に64ビットコードを実行する必要がない場合は、おそらく64ビットに移行する理由がありません。テクノロジーの進歩に伴い、チップメーカーは特に64ビットプロセッサ向けに追加のCPUレジスタを作成してパフォーマンスを向上させていますが、一般的に言って、より多くのビットを使用するだけでは魔法のようなパフォーマンスの向上はありません。実際、あなたが目撃したばかりのように、それはさらに悪化する可能性があります。

64ビット= Abramsタンク

32ビット= Toyota Prius

1つはより多くの作業を行うことができますが、もう1つはマクドナルドのドライブスルーに適合できます。

16
Ryan Ries