どの.NETパフォーマンスおよび/またはメモリプロファイラーがDLLのプロファイルを可能にしますか?
-
19-09-2019 - |
質問
私は、通常、ネイティブアプリケーションに至るまでのDLLとしてコンパイルされる他のプログラムのために、.NETベースのプラグインをたくさん書きます。私はEquatecのプロファイラーを使用していますが、これはうまく機能しますが、今ではメモリ使用量をプロファイルする機能など、より多くの機能を備えたものを希望しています。
Red GateのAntプロファイラーを試しましたが、私が見る限り、DLLをプロファイルする方法はありません。唯一のオプションは、exeをプロファイルすることです。
したがって、私の質問は、他のプロファイリングツールが利用可能であるため、EXEではなく単一のライブラリDLLをプロファイルできます。 Equatecが行うように、これにはプロファイルコードをライブラリに注入する必要があると思いますか?
解決
.NETメモリバリデーター と .NETパフォーマンスバリデーター どちらも、DLLだけをプロファイルできます。
設定ダイアログの「フックされたDLL」部分に興味がある(または興味がない)DLLを指定する必要があります。次に、アプリケーションを起動します - 指定されたDLLからのデータのみが収集されます。
完全な開示:私はこれらのツールを作成する会社のソフトウェアエンジニアです。
他のヒント
はい、それはこのように機能します。 dllは単なるコードの塊であり、exeのコードとマージされます。 dllはメモリを「所有」することはできません、AppDomainは行います。ただし、DLLから来たコードに費やされる時間を確認できます。
それ自体が主要なメモリの割り当てを行わないが、DLLのクラスのメソッドを呼び出すテストプログラムを作成すると、メモリ使用量を問題なくDLLに帰属させることができます。このようなテストプログラムを作成し、実際のプログラムでDLLコードを使用する方法に似ていますが、それほど簡単ではありません。
これはあなたにとってもはや関連性がないかもしれませんが、私は後世のためにここに出すと思いました、Redgate Antプロファイラーは、カスタムフィルターを使用して単一のDLLをプロファイルすることができます:
Ants Profiler 3 Project Wizardを使用して、通常の方法で「CoolApp」のパフォーマンスプロファイリングを設定します。ウィザードの最終画面は、プロファイリングを1つのライブラリに制限するためにプロジェクトをカスタマイズできるポイントです。カスタムフィルターを使用して、プロファイルされるアプリケーションの領域を制限することを指定します。
カスタムフィルターを編集し、以下に示すように、特定の名前空間のプロファイリングにのみ関心があることを指定します。この場合、ANTプロファイラーがRedgate.library1 Namepaceの一部であるプロファイルメソッドのみをプロファイルするフィルターをセットアップします。これはまさに私たちが望むものであり、プロファイリングを開始する準備ができました。
これで、通常の方法でプロファイリングを進めることができます。ただし、スナップショットを取得するか、アプリケーションを閉じることでパフォーマンスプロファイリング結果を取得すると、redgate.library1.dllのメソッドに関するデータのみが含まれます。
リンクが死んだ場合に備えて、ウェブサイトからのテキストが含まれています。