2012-02-21 22 views
2

サーバー上に大量のメモリを消費するアプリケーションを作成して、サーバー上のメモリ圧迫に関連する問題を表示したいと考えています。私はC#をかなりよく知っていますが、アプリケーションに制御可能な方法で過剰な量のメモリを消費させる最も効率的な方法は何か不思議です。たとえば、x MBのメモリを消費し、その値に近いところで消費するというパラメータを渡すことができます。どのように私がこれを行うかもしれないかについての考えは大いに感謝されるでしょう。あなたが探している「メモリ圧力」内容に応じてメモリ消費アプリケーションの作成

+0

本当に異なりますが、パフォーマンスはメモリの使用状況によって異なる動作をする可能性があります。 1つの大きなチャンクを割り当てることは、多くの小さなチャンクを割り当てることとは異なる影響を与える可能性があります。良いテストが必要な場合は、両方をテストする必要があります。 C#でGCを介してメモリを割り当てるとき、消費されている基本メモリを実際に制御することはできません。直接割り当てること(Marshall.Allocを呼び出す...)は行く1つの方法でしょう。 – Polity

+0

いつでもレイトレーシングアルゴリズムを実装し、たくさんのジオメトリを読み込むことができます。それは速く残忍に記憶を消費するでしょう。 – user18490

答えて

3

あなたが興味のあるサイズのバイト配列を作成するのが一番簡単な方法ではありません。非常に大きな割り当てを得るには、この手法を使って複数の配列を使う必要があります。あなたがそのようにあなたがちょうどあなたもSysinternalsのTestlimit使用できるアプリに必要がある場合は、p/VirtualAlloc

に呼び出すことができinclindedしている場合にも

。このユーティリティはMark Russinovichの素晴らしいPushing the Limits of Windowsシリーズで使用されました。

+0

それは私の最初の考えでしたが、それは本当に簡単なことができるかどうかをもう一度推測しました。 –

+0

はい、割り当て後に 'GC.GetTotalMemory'を使用して差異を見ることができるはずです –

+0

これを行うために 'System.OutOfMemoryException'を取得せずに割り当てることのできる制限があります。 1GBを超えて飛躍しようとすると、常に例外が発生します。私は、私の望む効果を得るためにアプリの複数のコピーをスピンアップすることができますが、これは大規模なメモリ割り当て4-8ギガバイトを得るための回避策がある場合は最高のことです。 –

2

  • BOOT.INI BURNMEMORYオプション - http://support.microsoft.com/kb/833721本当に使用可能なメモリの量を制限します。
  • 大量のメモリを割り当て、積極的に触れるプログラムを作成します。この方法で、他のプログラムがメモリ割り当て/使用の遅さにどのように反応するかを見ることができます。
  • アドレス空間に圧力をかけることに興味のあるプロセスにメモリを割り当てます(主に32ビット)。
2

1つの方法は、バイトの配列を作成することです。入力値をMBからバイトに変換し、配列を割り当てます。スタック割り当てを直接試したい場合は、stackallocを使用できます。

関連する問題