3

メモリが限られている状況でコードのエラー処理をテストしようとしています。

また、おそらく GC をより頻繁に実行する必要があるメモリ不足の状況で、コードのパフォーマンスがどのように影響を受けるかを知りたいと思っています。

限られたメモリで .Net アプリケーション (または NUnit テスト スイート) を実行する方法はありますか? Javaを使用すると、JVMがアクセスできるメモリの量を制限できることを知っています-.Netに似たようなものはありますか?

4

2 に答える 2

3

これは 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 を占有しません。

于 2013-06-07T16:24:05.050 に答える