2010-11-24 5 views
1

リモートパフォーマンスモニタを使用して、Compact Frameworkアプリケーションでメモリリークの原因を見つけようとしています。私はブラシやその他のグラフィックオブジェクトに関連するいくつかのマイナーなものを削除することができましたが、主な問題の原因を明確にしていません。リモートパフォーマンスモニタでリークを見つけるのを助けます

この時点で、元のカウントに戻らないように見える唯一のオブジェクトは、System.Stringオブジェクトです。私は、これらのオブジェクトが未収集のままであるためには、それらを含むオブジェクトも残っていなければならないと思っていたので、これは非常に奇妙であると思います。 System.Strings。

私は、アプリケーションが元の状態(ログイン画面)に戻った後に残る新しいStringオブジェクトを見つけようとしています。問題はもともと、アプリケーションが約2200文字列のオブジェクトをロードし、プロセス「X」の後に別の70以上のデータが収集されることがないことです。私は70の新しいオブジェクトをどのように識別して、誰がそれらを保持しているかを知り、適切な修正を行う方法を知りません。

文字列が収集されていない経験がある人はいますか?プロセス「X」中に作成された新しいオブジェクトを、アプリケーションが元々必要としていたものから分離して、どのオブジェクトが漏れているかを知ることができますか?アドバイスをいただければ幸いです。

おかげ

** UPDATE

[OK]を...非常に奇妙が起こっている何かがあります。私はリークがあるかどうか疑問に思っています。

アプリケーションのオリジナルの開始点であるログイン画面でメモリスナップショットを撮るとしましょう。この時点でメモリに1000個の文字列オブジェクトがあるとします。今、ログインしてメニューからオプションを選択すると、新しい画面がロードされたらスナップショットを撮ります。たとえば、このフォームを読み込むと、50個のオブジェクトが文字列カウントを増加させるとします。私がログアウトしてログイン画面で再びスナップショットを撮ると、それらのオブジェクトのうちの25個だけが収集され、残りはその後メモリに残ります。

私がこのプロセスを繰り返し続けても、それ以上の文字列オブジェクトは蓄積されないというのは奇妙なことです。文字列カウントが50ずつ増加する代わりに、この時点で25が追加され、ログイン画面に戻ると同じ25が収集されます。私は、これが実際のリークだった場合、私がその画面を開くたびに文字列の数が25だけ永久的に増加すると考えていますが、これは初めて発生します。

これは私が開いているすべての新しい画面で私に起こります。最初は全体の文字列数が少しずつ増加しますが、その特定の画面をロードすると、ログイン画面に戻ると、実行中の文字列数の増加が収集されます。

これらの文字列は、おそらくそれらの文字列がCLRなどの内部動作の一部であると考えられるようになりました。ランタイムによって行われるキャッシュのようなものでしょうか?おそらく、速い読み込みのために文字列定数を格納していますか?そんな感じ?私はこれがあまりにも混乱しないことを望む。

+0

私が上に投稿した更新を見てください^ – JayPea

答えて

0

CF 3.5を使用している場合は、RPMではなくthe CLR Profilerを使用してください。それはあなたにすべてのオブジェクトとそれらを産んだルーツを表示します。それはあなたが割り当てられた場所を把握するためにルートツリーを戻って行くことができます。

EDIT

だからあなたはあなたが実際にOOMsまたは任意のaberrent行動を取得していないことを言っていますか?あなたが必要でないときに最適化しようとしているように思えます。これらの文字列は、JITterが作成しているフォームキャプションなどのようなもので、オブジェクトが収集されたときに収集されます。しかし、あなたが実際に記憶上の問題を見ていないのであれば、実際にはそれほど重要ではありません。

+0

ありがとうございました。それは私のために働いていない、それは45秒間接続することができなかったと言います。私はRPM上でルートオブジェクトを見ることができますが、私はどのオブジェクトが新しいかを知る方法を知らない。 – JayPea

+0

ソフトウェアのデモを担当している担当者は、何らかのメモリ不足の問題が報告されました。しかしOOMの例外はありませんでした。これらの人々は、彼らの報告書ではあまり信頼できません(彼らはスクリーンショットを撮っていなくても技術に精通しているわけではありません)。最初は文字列が時間の経過と共に増加していると思っていましたが、(画面が一度開いたら)最大に達して停止する可能性が高いです。私が実際に漏れていると書かれているようには思われません。ありがとう – JayPea

関連する問題