Silverlight: 2009年12月アーカイブ

 サーバからのデータ取得を行うたびに、IEのメモリ使用量が増えて行くという現象が発生してしまっていたので、SilverlightのメモリリークについてGoogle先生と一緒にいろいろ調べてみました。
 以下はその時に試してみた方法のメモですが、内容については無保証ですので(このブログのエントリー全てそうですがw)、試される方は自己責任でお願い致します。

Silverlight application memory leaks detector

リークが発生しているかを確認したいクラスのコンストラクタで

MemoryProfiler.AddReference(this);
を呼び出せば、MemoryProfiler.checkを呼び出すことによって、使用メモリと、メモリ上に残っているAddRefferenceしたオブジェクトのインスタンス数を確認することができます。

Silverlight Spy

 Silverlightアプリケーションのメモリ使用量を含む、さまざまなデータを参照することができます。99ユーロ(個人使用なら69ユーロ)はちょっと高いけど、会社で買ってくれるっていうなら有ってもいいかも。

Finding Memory Leaks In Silverlight With WinDbg

 Microsoftが提供しているデバッグツール"WinDbg"(32bit版/64bit版)を使用した、Silverlightのメモリリーク検出方法。
 手順を簡単にメモ。

  1. IE上でSilverlightアプリケーションを起動
  2. WinDbgを起動する(スタート→プログラム→Debugging Tools for Windows)
  3. WinDbgのメニューから[File]→[Attach to a Process]を選択し、プロセス一覧から"iexplore.exe"を選択してOKをクリック
  4. 画面下部のコマンド入力欄に以下のコマンドを入力してsos.dllをロード
    .load C:\\Program Files\\Microsoft Silverlight\\3.0.40818.0\\sos.dll
    (※ パスは環境によって変わります/※2 先頭の"."を忘れずに)
  5. 以下のコマンドで、Silverlightアプリケーション内のインスタンス名、数、使用メモリが一覧表示されます。("SilverlightApplicationName"の部分は適宜編集してください)
    !dumpheap -stat -type SilverlightApplicationName
 あとはメニューのDebugから、Go→Break→一覧表示を繰り返して、メモリリークの原因を突き止めましょう。
 さらに詳しい情報はこことかこことか。

【 結 論 】
メモリリークはなくてもブラウザのメモリ使用量は時間とともに増加する...らしい?

1

このアーカイブについて

このページには、2009年12月以降に書かれたブログ記事のうちSilverlightカテゴリに属しているものが含まれています。

前のアーカイブはSilverlight: 2009年11月です。

次のアーカイブはSilverlight: 2011年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.0.3
ぎゅう♪ぎゅう♪ぎゅう♪ぎゅう♪ ぎゅう♪ぎゅう♪ ぎゅう♪ぎゅう♪