2011-01-19 7 views
2

私はいくつかのC#関数を持っていて、そのメモリ使用量をバイト単位で測定したいと考えています。次のように私はGC.GetTotalMemoryを使用:メモリ使用量に関する問題

long val1 = GC.GetTotalMemory(false); 

// my code 

long val2 = GC.GetTotalMemory(false); 

long result = val2 - val1 ; 

私はval2のからval1と引くとき、私はGC.GetTotalMemoryの引数として真と偽の両方を渡そうとしましたが、私は否定的結果の値を取得し、なぜ私にはわかりません。.. ...もう一つの問題GC.GetTotalMemoryは各excutionで異なる値を与えることで、私はそれが正確ではないと思う

私は否定的結果の値を取得する理由は、誰もが知っていることはできますか?それは私がそれらの両方を試してみましたが、あまりにも

を負の結果値を得たが、私はC#関数の各excutionに異なる値を取得し、なぜ誰もが知ることができ、(真または偽)ためargumenetのでしょうか?誰もがWindowsでC#の機能のためにバイト単位でメモリ使用量を測定するためのより良い効率的な方法を持っている場合

、私と感謝を教えてくださいしてくださいたくさん

+1

** **はありません。メモリに問題がある場合は、プロファイラを使用してください。 – SLaks

+0

正常に動作していることを意味します。それはあなたが本当にこれをしてはならないことを意味します。あなたが得るものは無意味です。 –

答えて

3

ガベージコレクションが行われた可能性があるためあなたは、負の結果を受信することができます2つのポイント間で、消費されるメモリの総量が減少します。実際には、GC.GetTotalMemory関数you're actually allowing it to wait for a garbage collection to take placeにtrueを渡すと、返される負の値の可能性が高くなります。

パフォーマンスモニタで、さまざまな(.NETおよびプロセス/メモリ)カウンタを見て、前と後を確認することで、このプロセスをポイントで一時停止できると仮定すると、これを行う方法がより正確になります。

0

GC.GetTotalMemoryは特定のメソッドによって割り当てられるメモリの量を判断するのに役立つとは思わないが、GCはその間に何か処理を行っていた可能性があり、結果は信頼できない。

あなたは私が考える2週間無料、いずれかのVS 2010プロファイラ、またはレッドゲートからANTSプロファイラ、プログラムのメモリ割り当てを識別するためにプロファイラを使用することはできません。

sysの内部ユーティリティは、プログラム、ワーキングセットなどに割り当てられたメモリをチェックするのに便利です。

関連する問題