4

Windows Web Server 2008 R2(x64)および.Net Framework 4.5

これは従来のASP.NetWebサイトです(Webプロジェクトではなく、コードはApp_Codeディレクトリにあり、サイトの起動時にコンパイルされます)

また、 /Binディレクトリ内の多くの参照DLLに依存します。ソースコードを持っているDLLについては、「x64」プラットフォームをターゲットにしてコンパイルします。

そして、「任意のCPU」としてコンパイルされた、ソースコードのない他のDLL(mysql.data.dll /など)がいくつかあります。EditBin.exeでそれらを変更して、IMAGE_FILE_LARGE_ADDRESS_AWAREフラグがPEヘッダーに示されるようにしました。

この表によると:http: //msdn.microsoft.com/en-us/library/aa366778%28VS.85%29.aspx#memory_limits

IMAGE_FILE_LARGE_ADDRESS_AWAREが設定されていない限り、x64プロセスは2GBを超えるメモリを使用できません。

それが機能するかどうかを確認するにはどうすればよいですか?x64プロセスを実行する際のメモリ制限を確認できる場所はありますか?

4

2 に答える 2

1

IISやASP.NETのソースコードを手に取って掘り下げる以外に、明示的に(引用したMS自身のドキュメントを信頼していないと仮定して)実際に「メモリ制限を確認」できるかどうかはわかりません。 。

そうは言っても、サイトのストレステストを試して、メモリ消費量を(Task Managerまたはを介してProcess Monitor)監視し、2GBを超えているかどうかを確認することができます。IIS7で引き続き使用できるIIS6リソースキットtinygetの一部をお勧めします。

tinyget -svr:localhost -uri:/<your site> -loop:200 -threads:20

2GBを超えてプッシュするには、ループとスレッド数を試してみる必要があります。物理プライベートバイトと仮想プライベートバイトの合計が約1.4GBにSystem.OutOfMemoryException近づくと、もちろん、テスト目的でのみ、サイト自体にストレステスト関数を作成することをお勧めします。これは、グッドプラクティスとは正反対の方法を使用して、この制限に到達するのに役立ちます。System.OutOfMemoryException`につながる原因について詳しくは、こちらをご覧ください。その後、推奨されていることを実行できます。たとえば、非常に大きなループで文字列を連結するだけのテストメソッドを追加します。

于 2016-03-03T05:58:16.380 に答える
0

ここのsysinternalsからprocexpを試してください。このアプリケーションは、.NET固有のメトリックを監視できます。

それでも、リンクによると、少なくとも8GBをアドレス指定できるはずです。

IMAGE_FILE_LARGE_ADDRESS_AWAREを適用することは、あなたの場合には無関係であることに注意してください。すべてのコンポーネントをコンパイルして「AnyCPU」をターゲットにすることができます。チェックされるフラグは、実行可能ファイルのフラグだけです。

于 2013-02-27T14:00:03.760 に答える