リモートパフォーマンスモニタを使用して、Compact Frameworkアプリケーションでメモリリークの原因を見つけようとしています。私はブラシやその他のグラフィックオブジェクトに関連するいくつかのマイナーなものを削除することができましたが、主な問題の原因を明確にしていません。リモートパフォーマンスモニタでリークを見つけるのを助けます
この時点で、元のカウントに戻らないように見える唯一のオブジェクトは、System.Stringオブジェクトです。私は、これらのオブジェクトが未収集のままであるためには、それらを含むオブジェクトも残っていなければならないと思っていたので、これは非常に奇妙であると思います。 System.Strings。
私は、アプリケーションが元の状態(ログイン画面)に戻った後に残る新しいStringオブジェクトを見つけようとしています。問題はもともと、アプリケーションが約2200文字列のオブジェクトをロードし、プロセス「X」の後に別の70以上のデータが収集されることがないことです。私は70の新しいオブジェクトをどのように識別して、誰がそれらを保持しているかを知り、適切な修正を行う方法を知りません。
文字列が収集されていない経験がある人はいますか?プロセス「X」中に作成された新しいオブジェクトを、アプリケーションが元々必要としていたものから分離して、どのオブジェクトが漏れているかを知ることができますか?アドバイスをいただければ幸いです。
おかげ
** UPDATE
[OK]を...非常に奇妙が起こっている何かがあります。私はリークがあるかどうか疑問に思っています。
アプリケーションのオリジナルの開始点であるログイン画面でメモリスナップショットを撮るとしましょう。この時点でメモリに1000個の文字列オブジェクトがあるとします。今、ログインしてメニューからオプションを選択すると、新しい画面がロードされたらスナップショットを撮ります。たとえば、このフォームを読み込むと、50個のオブジェクトが文字列カウントを増加させるとします。私がログアウトしてログイン画面で再びスナップショットを撮ると、それらのオブジェクトのうちの25個だけが収集され、残りはその後メモリに残ります。
私がこのプロセスを繰り返し続けても、それ以上の文字列オブジェクトは蓄積されないというのは奇妙なことです。文字列カウントが50ずつ増加する代わりに、この時点で25が追加され、ログイン画面に戻ると同じ25が収集されます。私は、これが実際のリークだった場合、私がその画面を開くたびに文字列の数が25だけ永久的に増加すると考えていますが、これは初めて発生します。
これは私が開いているすべての新しい画面で私に起こります。最初は全体の文字列数が少しずつ増加しますが、その特定の画面をロードすると、ログイン画面に戻ると、実行中の文字列数の増加が収集されます。
これらの文字列は、おそらくそれらの文字列がCLRなどの内部動作の一部であると考えられるようになりました。ランタイムによって行われるキャッシュのようなものでしょうか?おそらく、速い読み込みのために文字列定数を格納していますか?そんな感じ?私はこれがあまりにも混乱しないことを望む。
私が上に投稿した更新を見てください^ – JayPea