私は、C#のプログラムで、メモリ使用量を測定しようとしています。C#でメモリ使用量を測定するにはどうすればいいですか?
私はこのJava関数のC#の同等のものを知りたい:ヒープにを割り当てられたメモリの合計を表す
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getCommitted()
を。私はC#のプログラムのために割り当てられたメモリの合計サイズを知るために必要です。
は、次にJavaで私が使用しているメモリを得ることができます:
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed()
は、現在、私が使用しているメモリを取得するためにC#でこれを使用:
Process_Memory = MyProcess.PrivateMemorySize64;
をしかし、私はそれがだとは全くわからないんだけど同等。
したがって、私のC#アプリケーションと現在の使用の合計割り当て領域を取得するにはどうすればよいですかt?
EDIT:
回答や今後の研究から、私はこれを決定しました:
現在使用中のメモリ
System.GC.GetTotalMemory(false);
番号を付けを現在のバイト数yは管理されたメモリに割り当てられます。 (http://msdn.microsoft.com/fr-fr/library/system.gc.gettotalmemory.aspx)
この方法は、低値を返し、私はそれが私がgetUsed()
でJavaを得ることができるよう、実際に使用されているすべてのメモリの表現ではないだと確信しています。同じアプリケーションのJavaでは、メモリは5MBで開始し、最大125MBになります。 C#の場合、上記の方法で1〜5 MBが得られます。
ようです:
MyProcess.PrivateMemorySize64; // return ~=25MB
または
MyProcess.WorkingSet64; //return ~=20MB
は、使用中のすべてのメモリのより正確な値を与えます。しかし、私は私が使用すべきものを知りません...
グローバルに割り当てられたメモリthis articleのために使用することが示唆:
Process_MemoryEnd1 = MyProcess.VirtualMemorySize64;
それはその169メガバイトについては、プログラムの開発に沿って常に同じ値を返しますJavaと比較して公平だと思われる:64MBから170私はまだ私が見つけたすべては非常にあいまいであると私は、Windowsのメモリ管理に精通していないよ、私は私が見つけたドキュメントをundertandて本当にわからないんだけど、正確な答えを探していますMB最大
:/
はい、私はこれを知っているが、それ管理されたヒープ内のオブジェクトの実際のサイズを指定すると、値は小さくなります。私はこれがすべての割り当てられたメモリの代表だとは思わない。 –
次に、未処理の割り当てメモリ(管理されたGC機能を考慮しない)を使用する場合は、 'Process'クラスのすべてのプロパティを使用するだけでよいと思います。 'PagedMemorySize64'、' PrivateMemorySize64'など – Tyson
ありがとう、私はちょうどprocessusの合計割り当てメモリ 'PrivateMemorySize64'だけで十分だと思います。私はページングされたメモリを取得しません... –