0

各ノードが TreeNodeViewModel である Silverlight TreeView があります。TreeNodeViewModel のプロパティは、Text、IsSelected、ImageUri、および Parent です。約 700 から 1000 の TreeView アイテムを読み込んでいます。

HierarchicalDataTemplate のバインディングを介して TreeView をロードした後、IE ブラウザのフットプリントが約 48,000kb から 165,000kb に増加したようです。私は TreeView 自体に ViewModel を使用しています。これには、ExpandAll と CollapseAll のバインディングがあります。expand コマンドを実行すると、IE のフットプリントが 300,000kb 近くまで拡大し続けます。ツリーが完全に展開されると、展開と折りたたみを繰り返してもフットプリントは増加しません。つまり、すべての ViewModel が作成されると横ばいになるようです。

私の質問は、約 800 の TreeView アイテムをロードしている場合、フットプリントが私の場合と同じくらい大きくなると予想されますか? 大量のデータをロードすることで IE が過度に占有されるのを見たことがありますか?

私が開発している SL アプリの背景: ハードウェア デバイス (別名: サーバー) は独自のハードウェアであり、linksys ルーターに似た Web サーバーが組み込まれています。圧縮された構成ファイル (モデル エンティティ) がデバイスに読み込まれ、SL アプリがそれをダウンロードして解凍し、DataContractSerializer を使用して逆シリアル化します。ファイルは圧縮で約1.75MB、非圧縮で約12.5MBです。

私が最初に考えたのは、モデルの逆シリアル化のために IE のフットプリントが大きいということでした。最初に IE を起動したときのフットプリントは約 7500kb で、モデルをメモリにロードすると最大 48,000kb まで実行されます。

どんな考えや提案も大歓迎です。

4

2 に答える 2

0

これはあなたの質問に対する答えではないかもしれませんが、標準の Silverlight コントロールと Silverlight ツールキット コントロールは使用していません。私たちは彼らのバグと戦うのに十分苦労しました. それらの2つだけ:

  1. childwidow に datepicker (または timepicher) を配置することはできません。そのスタイルは失敗し、リソースを再宣言して機能させる必要があります。

  2. TreeView - ツリービューの状態 (展開されているノードと展開されていないノード) を保存できますが、復元するのは非常に困難です。非常に注意が必要です。親を展開するまで、ノードは作成されません。

とにかく、私は何について話しているのですか?できるだけ早く標準のコントロールを放棄し、上司に Telerik、Devexpress、または好きなものを購入するように強制します。これはすでに Silverlight と wpf の 4 番目のバージョンであり、いくつかの基本的なことはすぐに使用できるコントロール ライブラリでは実行できず、メモリ リークは依然として発生し、バグは修正されていません。

于 2011-01-20T09:08:37.513 に答える
-1

YourKitプロファイラーなどのプロファイラーを使用して、少なくともメモリを使用しているもののメモリプロファイルを取得することをお勧めします。これは、メモリ消費の観点からホットスポットが何であるかを見つけるのに役立ち、メモリリークを追跡するのに役立ちます。

165MBが多すぎませんか?このメモリ使用量がGCにあまり圧力をかけておらず、ほとんどがゴミである可能性がある場合に備えて、GC.Collectを強制できますか?

プロファイラーを試して、アプリのプロファイルをよりよく理解してください。

于 2011-01-20T08:36:03.057 に答える