0

私はANTSメモリプロファイラーを使用していますが、現時点ではやや困惑しています. サイトをロードしてANTSをプロセスに接続すると、約90MBのプライベートバイトが表示され、同じルーチンを何度も実行すると、次の結果が得られます。

  1. 109MB
  2. 120MB
  3. 125メガバイト
  4. 126メガバイト
  5. 123MB
  6. 126メガバイト

基本的に、試行ごとに約126MBのままです。私の理解では、メモリリークが発生した場合、それがkeep上昇して解決しないということですが、理解できないのは、なぜ126MBまでゆっくりと成長するのかということです. .NET には、予約できるメモリ量があり、その制限に達していますか?

簡単な質問: メモリはある時点まで増加してから停止します。これは .NET アプリでは正常ですか?

EDIT:これをprogrammers.stackexchange.comに投稿する必要があったことに気づきました-お詫びします。

4

2 に答える 2

4

「メモリリーク」とは、割り当てるべきではないと思われるメモリ割り当てられることです。

単純にメモリの消費量を見て「メモリリークしている」とは言えません。つまり、アプリケーションが 3 日間メモリにログを収集するとどうなるでしょうか。この場合、メモリ消費量は増加しますが、リークの兆候ではありません。一方、アプリケーションが 1 分間に 1 行を印刷するだけで、メモリ使用量が絶えず増加する場合は、リークの可能性が高くなります。

于 2012-03-29T15:58:56.207 に答える
0

私の経験では、メモリが増加して横ばいになった場合、それは一般的にキャッシュによるものです。前に述べたように、メモリ リークは単に、解放されるべきだと思われる何かがメモリに残っている場合です。プロファイラーを使用すると、(タスク マネージャーを使用するのではなく) リークを特定するのに最適な方法です。これにより、通常、第 2 世代のガベージ コレクションが確実に実行され、メモリ内に残っているすべてのものを確認できるようになります。

プロファイルを作成するときは、通常、テストしたいコマンドを数回実行して、すべてのキャッシュが発生したことを確認してから、前後のスナップショットを作成し、メモリの差分を比較します。C# のようなマネージ言語を使用している場合、+/- 10KB のデルタが発生することは珍しくありません。このプロセスを数回繰り返し、デルタが一貫して正の値である場合は、リークが発生している可能性が高くなります (意図的により多くのメモリを割り当てていないと仮定します)。

于 2012-04-26T17:14:55.187 に答える