2

.NET プロセスが使用できるメモリ量に人為的な制限を設けることは可能ですか? テスト目的でメモリ不足の状況をシミュレートしようとしています。

現在、この種のことには仮想マシンを使用しています。それは機能しますが、もっと便利なアプローチを見つけられるかどうか知りたいです. 簡単に自動化できるものが理想的です。

編集: Hans Passant が指摘しているように、プロセスで使用できる仮想メモリの量を制限するだけでは、VM ベースのテストに取って代わることはありません。テストはパフォーマンスのためのものなので、代わりにスワッピングを取得する必要がありOutOfMemoryExceptionます。

4

3 に答える 3

3

簡単に自動化できるものが理想的です。

Windows ジョブ オブジェクトを使用して、コードからこれを管理できます。プロセスはジョブに関連付けることができ、JOBOBJECT_BASIC_LIMIT_INFORMATIONを使用すると、ワーキング セットのサイズを制限できます。

または、プロセスでSetProcessWorkingSetSizeを直接呼び出すこともできます。これにより、そのプロセスの最大許容メモリ使用量が制限されます。

于 2012-08-27T17:39:57.000 に答える
1

Windows Application Verifier ツールは、低メモリなどの低リソース レベルをシミュレートできます: http://msdn.microsoft.com/en-us/library/aa480483.aspx

ジョブ オブジェクトを使用したよりプログラム的なソリューション (@ReedCopsey も示唆) は次のとおりです。 -で

于 2012-08-27T17:39:54.350 に答える
1

現在、この種のことには仮想マシンを使用しています

これはおそらくRAMの量を制限したことを意味します。これは大したテストではありません。Windows プロセスが RAM を使い果たすことは決してありません。プロセスが遅くなるだけで、オペレーティング システムはより頻繁にページを交換します。

実際の制限は、使用可能な仮想メモリ アドレス空間です。これは、32 ビット プロセスの固定数であり、2 ギガバイトです。その数を増やすために、いくつかの非標準オプションを提供または取得します。OutOfMemoryException は、割り当てに適合する十分な大きさのホールがプロセスに VM に残っていないことを示します。

VM スペースの量を制限するには、単純に 50 メガバイトの byte[] 配列の束を割り当て、それらList<byte[]>を Main() の先頭にある型の静的変数に格納します。

于 2012-08-27T18:08:29.237 に答える