6

かなり大きな Silverlight 4 アプリケーションがあります。私たちはアプリケーションのメモリ リークを見つけようとしていますが、これは困難な作業になっています。

元の投稿を見た人のために、これで状況は完全に変わりました!

ANTS メモリ プロファイラが適切なものを表示していないことに気付きました。これは、メモリ リークがマネージ コードではなく、ネイティブ コードにあったためです。ANTS のいくつかの問題を修正しました。これは、マネージ コードのメモリ リークに適したツールです。

それで、このブログを見つけて、

http://blogs.msdn.com/b/slperf/archive/2010/08/19/analyzing-silverlight-memory-usage-part-1-obtaining-measurements.aspx

それは素晴らしかった。xPerf と xPerfViewer を使用してネイティブ ヒープを表示し、実際のメモリ リークと思われるものを確認しました。

したがって、次のようなスタック トレースが表示されます。

CCoreServices::Draw
    CCoreServices::Tick
    CUElement::Render
        CUIElement::Render
        CUIElement::RenderWithTransform
        CUIElement::RenderVisual
        CUIElement::RenderChildren
            {Repeat of the above in a recursive fashion}

したがって、この「Render」メソッドでは、約 520 バイトのメモリがどこかに割り当てられますが、私が知る限り、それは解放されません。

呼び出されたメソッドまたはクラスも表示されます

SDBitmapCreate

メモリもリークしています。

何かを見つけたようで面白いのですが、何が何だかよくわかりません。

他の提案はありますか?

ありがとう。

4

4 に答える 4

6

Silverlightのメモリリークのトラブルシューティングに関する優れたチュートリアルがここにあります:http://davybrion.com/blog/2009/08/finding-memory-leaks-in-silverlight-with-windbg/。複雑で、WinDBGコマンドを処理する必要がありますが、過去に役立つことがわかりました。もちろん、これはあなたの質問に具体的に答えるものではありませんが、それはあなたを正しい方向に向けるかもしれません。

于 2010-12-14T01:00:27.317 に答える
4

まず、Silverlight 用のメモリ リーク ツールを知りません。

数週間前にメモリリークの問題が発生したと思っていたのを経験しました。私の Silverlight アプリケーションには、キャンバスに不正な子が含まれていたことが判明しました。

私の問題はあなたの問題ではないかもしれませんが、考えさせられるかもしれません。

サーバーからの結果をリストに再入力する前に、適切なキャンバスからすべての子を削除する必要がありました。リストをクリアするだけでは十分ではありませんでした.:

        for (int i = 0; i < boxDataLabel.Count; i++)
        {
            canvaz.Children.Remove((Label)boxDataLabel[i]);
        }
        boxDataLabel.Clear();

boxDataLabel は Label タイプのリストです。

幸運を。

于 2010-12-09T22:34:07.613 に答える
2

Xaml のインライン DataTemplate に関する公式のメモリ リークがあります。それについてのスレッドをここで読むことができます: http://forums.silverlight.net/forums/t/171739.aspx .

Microsoft は、この問題を修正するサービス リリース (アップデート ビルドは 4.0.50826.0) をリリースしました: http://timheuer.com/blog/archive/2010/09/01/silverlight-service-release-september-2010-gdr1。 aspx

サービス リリースで問題 (の一部) が修正された場合は、ホスト html ファイルの最小バージョンを更新することを忘れないでください。

于 2010-12-15T07:05:15.013 に答える
1

私があなたの状況にあった場合、リークをデモする簡単なテスト アプリケーションを作成して、実際のコードの外で再現可能であることを再確認します。これは、コードの微妙なバグではないことを証明しています。次に、MS 関係者が監視している MS Silverlight フォーラムにテスト アプリを投稿します。MSDN サブスクリプションをお持ちの場合、または会社が MS とサポート契約を結んでいる場合は、MS との "チケット" (彼らが実際に何と呼んでいるのかは忘れてください) も開きます。

于 2010-12-20T12:37:57.173 に答える