メモリが限られている状況でコードのエラー処理をテストしようとしています。
また、おそらく GC をより頻繁に実行する必要があるメモリ不足の状況で、コードのパフォーマンスがどのように影響を受けるかを知りたいと思っています。
限られたメモリで .Net アプリケーション (または NUnit テスト スイート) を実行する方法はありますか? Javaを使用すると、JVMがアクセスできるメモリの量を制限できることを知っています-.Netに似たようなものはありますか?
これは CLR のオプションではありません。メモリは非常に異なる方法で管理され、.NET プロセスには少なくとも 10 個の個別のヒープがあります。.NET プログラムは、Windows プロセスで使用可能な仮想メモリ空間全体を制限なく使用できます。
最も簡単な方法は、プログラムの開始時にメモリを割り当てることです。少し注意する必要があります。一気に飲み込むことはできません。異なるアドレスにコードとデータが混在しているため、アドレス空間は断片化されています。メモリはその間の穴から割り当てられます。使用可能なアドレス空間に深刻な影響を与えるには、少なくとも 1 ギガバイトを割り当てる必要がありますが、これは単一の割り当てでは不可能です。
したがって、ループを使用して小さなチャンクを割り当てます。たとえば、一度に 1 メガバイトを割り当てます。
private static List<byte[]> Gobble = new List<byte[]>();
static void Main(string[] args) {
for (int megabyte = 0; megabyte < 1024; megabyte++)
Gobble.Add(new byte[1024 * 1024]);
// etc..
}
これは非常に高速であることに注意してください。割り当てられたアドレス空間は予約されているだけで、RAM を占有しません。