1

回帰をチェックするために、さまざまなシナリオでアプリケーション (またはサブコンポーネント) のメモリ使用量を監視するさまざまなテストがあります。問題は、( を使用しProcess.Refresh(); Process.PrivateMemorySize64た) 測定値が実行ごとに大きく変動することです。

現在行っていることは、Xミリ秒ごとにバックグラウンド スレッドを介してポーリングすることです。到達した最大値をベンチマークと比較し、それに応じて合否を判定します。

興味深いことに、ポーリング間の時間を短縮すると、記録される最大メモリ値が大幅に減少します。一例では、メモリを 100ms ごとに読み取ると最大 360MB になり、10ms ごとに 147MB になり、1ms ごとに 35ms になります。おそらく、観測数の増加により、何らかの形で GC の動作がより積極的になります。

主な問題は、測定しようとしている「最大メモリ使用量」が特に明確に定義されていないことだと思います。使用可能なメモリが十分にある場合、GC は起動しない可能性があるため、メモリ使用量が高くなるように見えます。

パフォーマンスの低下を防ぐために、ドットネットでメモリ使用量を測定する標準的な方法はありますか?

4

2 に答える 2

1

主な問題は、測定しようとしている「最大メモリ使用量」が特に明確に定義されていないことだと思います。使用可能なメモリが十分にある場合、GC は起動しない可能性があるため、メモリ使用量が高くなるように見えます。

これはあなたの問題です。ガベージ コレクトされたランタイムが、使用可能な場合により多くのメモリを使用することは、任意ではありません。これらのアルゴリズムは、"遊び回る" ためのメモリ領域が大きいほど、パフォーマンスが大幅に向上します。客観的な分析を行うには、ガベージ コレクションの動作の影響を受けない、到達可能なセットのみを分析するツールを使用する必要があります。

于 2013-03-19T14:15:55.313 に答える
0

PerformanceCounter classメモリの使用量を測定するために使用できます

リンク: http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx

Memory Profiler toolメモリを検査するために使用できるマニュアル

リンク : http://memprofiler.com/

于 2013-03-19T14:05:44.187 に答える