8

だから私はメモリリークしている.NETWindowsストアアプリを持っています。私はそれについて何ができますか?jetBrainsまたはRed-Gate/ANTSのデスクトップアプリに使用したプロファイラーツールは、Metro Appsをサポートしていません(または現在サポートしていますか?)

4

2 に答える 2

12

最も単純なアプローチの場合-下部にスキップして、VisualStudio2013でそれを行う方法の説明を読んでください。


今、いくつかの新しいツールがあるかもしれません-おそらく更新されたVisual Studioに何かがあり、これらについて見つけたいと思いますが、私は以前にWinDbgを試しましたが成功しました。これを行う方法についての私の古いメモは次のとおりです。

1. Create dump file from process manager
2. Run WinDbg (X64)
3. File/Open Crash Dump… (Crtl+D)
4. Run following:

lm
.load C:\windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll
.sympath SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols
.symfix
.reload
!dumpheap -stat

プロセスがx86の場合、特にx64バージョンのWindowsで実行している場合は、ダンプを保存するためにx86バージョンのデバッガー(WinDbgには両方のバージョンが付属しています)を使用する必要があることに注意してください。WinDbgのマネージドメモリデバッグ拡張機能であるSOSは、x86ビットプロセスのx64ビットダンプのデバッグをサポートしていません。次に、sosパスもそれぞれ更新する必要があるため、次のようになります。

.load C:\windows\Microsoft.NET\Framework\v4.0.30319\sos.dll

おそらく、これらのコマンドのすべてが必要なわけではありませんが、これは私にとってはうまくいきました。

これで、非常に多くのインスタンスに存在するように見えるオブジェクトのタイプを見つけることができます

!DumpHeap -type TypeName

ここで、タイプ名はタイプの名前だけです。完全修飾の名前空間は必要ありません。

これで、このオブジェクトをメモリに保持するものを確認できます。

!GCRoot Object_Address

デバッガーを接続するとアプリが一時停止するように見えるため、ライブデバッグが機能しませんでした。アプリをメモリ内にとどまらせるオプションをどこかで見たと思いますが、どこかを忘れましたが、メモリプロファイリングには静的ダンプファイルを見るだけで十分かもしれません。


WinDbgは、Windows SDKの一部として、または「DebuggingToolsforWindows」のスタンドアロンダウンロードとしてここからダウンロードできます。

ダンプファイルを作成するには-タスクマネージャに移動し、プロセスを右クリックして[ダンプファイルの作成]を選択します。


その他のリンク:

http://blogs.microsoft.co.il/blogs/sasha/archive/2012/10/15/diagnosing-memory-leaks-in-managed-windows-store-apps.aspx

http://blogs.msdn.com/b/delay/archive/2009/03/11/where-s-your-leak-at-using-windbg-sos-and-gcroot-to-diagnose-a-net- memory-leak.aspx

http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/f3a3faa3-f1b3-4348-944c-43f11c339423

http://msdn.microsoft.com/en-us/library/bb190764.aspx

http://blogs.msdn.com/b/dougste/archive/2009/02/18/failed-to-load-data-access-dll-0x80004005-or-what-is-mscordacwks-dll.aspx


*編集

StephenToubによるVisualStudio2012を使用した.NETメモリ割り当てプロファイリングによると-PerfViewツールは、 .NETWindowsストアアプリのリークの分析をサポートしています。ヴァン・モリソンの記事とビデオのチュートリアルをここで確認してください。


*編集2

Visual Studio 2013プレビューには、ダンプファイルから管理対象メモリヒープを分析するための新しいオプションが追加されています。これを行うには、Visual Studioデバッガーでアプリを一時停止し、[デバッグ] / [名前を付けてダンプを保存]で現在のダンプを保存してから、実行を再開し、リークが疑われるまでアプリを使用して、別のダンプを実行します。次に、[ファイル]/[開く]/[ファイル]に移動して、2番目のダンプファイルを開きます。[アクション]パネルの[ダンプの概要]の右側に、[管理対象メモリのデバッグ]アクションが表示されます。それを選択し、「ベースラインの選択」で最初のダンプファイルを選択します。管理対象ヒープ上のオブジェクトのリストが、タイプごとにグループ化され、カウントの差分が表示されます。通常、最初にカウントの差がゼロ以外の低いオブジェクトを調べて、単一のリークソースを追跡することに注意してください。

于 2012-12-05T19:00:39.730 に答える
1

Telerik JustTraceはWindowsストアアプリをサポートしています:http ://www.telerik.com/products/memory-performance-profiler/justtrace-features.aspx

于 2013-02-14T07:25:53.687 に答える