Windows には適切なサンプリング (インストルメント化されていないなど) のプロファイラーが用意されていますか? MacOS の Shark に似たものが望ましいですが、Windows でこのようなプロファイラーを使用するには料金がかかることを承知しています。
私は VS Team Suite でプロファイラーを試しましたが、あまり感銘を受けませんでした。
[編集: ええと、これは .NET ではなく C/C++ 用であると言うのを忘れていました -- 混乱して申し訳ありません]
Windows には適切なサンプリング (インストルメント化されていないなど) のプロファイラーが用意されていますか? MacOS の Shark に似たものが望ましいですが、Windows でこのようなプロファイラーを使用するには料金がかかることを承知しています。
私は VS Team Suite でプロファイラーを試しましたが、あまり感銘を受けませんでした。
[編集: ええと、これは .NET ではなく C/C++ 用であると言うのを忘れていました -- 混乱して申し訳ありません]
Windows の場合は、Windows SDK に同梱されている無料のXperfを確認してください。サンプリングされたプロファイルを使用し、便利な UI を備えており、インストルメンテーションは必要ありません。パフォーマンスの問題を追跡するのに非常に役立ちます。次のような質問に答えることができます。
最も多くの CPU を使用しているのは誰ですか? コール スタックを使用して関数名にドリルダウンします。
最も多くのメモリを割り当てているのは誰ですか?
未処理のメモリ割り当て (リーク)
レジストリ クエリを最も多く行っているのは誰ですか?
ディスク書き込み?等
この質問が出されてから数か月後に回答を追加していることはわかっていますが、まともなオープンソースのプロファイラーであるVery Sleepyを指摘したいと思いました。
前述の他のプロファイラーのような機能数はありませんが、ほとんどの状況で非常にうまく機能する、非常に優れたサンプリング プロファイラーです。
Intel VTuneは優れており、インストルメント化されていません。Windows 用の多数のプロファイラーを評価しましたが、これはドライバー コードを操作するのに最適でした (ただし、管理されていないユーザー レベルのコードも処理します)。特に強みは、すべての Intel プロセッサ パフォーマンス カウンターを読み取ることです。そのため、コードの実行速度が遅い理由をよく理解できます。また、プリフェッチ命令をコードに挿入し、データ レイアウトを整理して、キャッシュライン、およびマルチコアシステムでキャッシュラインが無効になる方法。
これは商用であり、世界で最も簡単な UI ではないと言わざるを得ません。
AMD の CodeAnalyst はこちらから無料 です
私たちは VTune と AQTime の両方を使用していますが、どちらも保証できます。どちらが最適かは、ニーズによって異なります。どちらも無料の試用版があります - 試してみることをお勧めします。
Windows Driver Kitには、 "kernrate"と呼ばれる非計測ユーザー/カーネル サンプリング プロファイラーが含まれています。マルチプロセス アプリケーション、カーネルでほとんどの時間を費やすアプリケーション、およびデバイス ドライバー (もちろん) のプロファイリングに役立つようです。また、KrView (Kernrate Viewer)およびWindows Server 2003 リソース キット ツールパッケージでも利用できます。
Kernrate は Windows 2000 以降で動作します (Vista / Server 2008 を必要とする Xperf とは異なります)。これはコマンド ライン ベースであり、ドキュメントにはやや威圧的なオプションのリストがあります。コールスタックを記録できるのか、それともプログラムカウンターだけを記録できるのかはわかりません。シンボル サーバーを使用する場合は、最新のdbghelp.dll
とsymsrv.dll
を同じディレクトリに配置して、にインストールされているkernrate.exe
の古いバージョンを使用しないようにしてください。dbghelp.dll
%SystemRoot%\system32
私は約 2 年前にかなり大きなプロジェクトで Intel の vtune を試しました。当時はインストルメント プロファイラーであり、プロファイリングしようとしていた DLL をインストルメント化するのに非常に時間がかかり、最終的には 1 時間後に我慢できなくなってしまいました。
私が非常に成功したツールの 1 つで、強くお勧めするのはAQTimeのツールです。優れたパフォーマンス プロファイリング リソースを提供するだけでなく、非常に優れたメモリ プロファイリングも実行します。これは、メモリ リークを追跡するのに非常に役立ちました。
Luke Stackwalkerは有望なようです。私が望むほど洗練されていませんが、オープンソースであり、@MikeDunlaveyがやるべきだと言い続けていることに非常に近いように見えます。(もちろん、マイクがとてもうんざりしている、通常は役に立たないコールグラフにすべてをスムージングしようとしますが、ソースを味方として修正するのはそれほど難しいことではありません。)
私が知る限り、カーネルでの待機に費やされた時間を数えているようです...
非計測プロファイラーが何であるかはわかりませんが、.NET については、RedGate の ANTS プロファイラーが大好きだと言えます。バージョン 3 は使いやすさで MS バージョンを上回り、任意のタイム スライスを許可するバージョン 4 は、MS を冗談のように見せます。