顧客に既に展開されている.NETアプリのパフォーマンスをプロファイルするにはどうすればよいですか?
-
03-07-2019 - |
質問
WinFormsアプリが他の顧客と同じように機能しない顧客がいます。ここではオフィスでJetBrainのdotTraceを使用していますが、それはお客様のマシンのボトルネックを見つけるのに役立ちません。顧客に既に展開されている.NETアプリのパフォーマンスをプロファイルするにはどうすればよいですか?結果(dotTraceのスナップショット)を完全なプロファイリングツールに戻すまで使用できないプロファイリング結果を生成できる再配布可能なコンポーネントを備えたプロファイリングツールはありますか?
更新: NProf は自由に配布できるため、お客様のワークステーションに展開することを考えています。ここで結果を報告します。
解決
dotTraceに慣れていませんが、Visual StudioのコンテキストでVisual Studio 2008のインスツルメンテーションおよびプロファイリングツールを使用しており、.NET 3.5 SDKで配布されていると思います。
VSInstr.exeツール: http://msdn.microsoft.com/en-us/library/ms182402。 aspx デプロイされたバイナリをインストルメントします。
VSPerfCmd: http://msdn.microsoft.com/en-us/library/ms182403。 aspx インストルメント済みアプリからパフォーマンスデータをキャプチャできます。
私はコマンドラインから直接かつ単独でそれをやったことがないので、そこであなたに多くの支援を提供することはできませんが、少なくともこれはあなたにとって別の選択肢であると考えました。
他のヒント
だから、あなたが必要としているのは、パフォーマンス広告の展開時間を測定する何らかの方法だと思います。彼らがそうであるように、私はあなたのアプリケーションにパフォーマンスカウンターを追加することを検討するかもしれません。 System.Diagnostics を参照してください。配備中のアプリケーションを監視するために広範囲に使用しました。私は、プロファイラーが素晴らしい一方で、オーバーヘッドのために特定の問題を隠すことがあることを発見しました。たとえば、アプリケーションがデータベースにヒットし、ディスクの速度が遅くなり、クエリの時間が長くなる場合、一般的にアプリケーションの実行速度が遅くなるため、プロファイラーでは明らかにならない場合があります。
クライアント側では、アプリがインストール時に管理アクセスを必要としない場合、パフォーマンスカウンターを「診断モード」の一部にすることができます。それらをインストールするには管理者アクセスが必要なため。パフォーマンスカウンターを配置して、データベースとサービスの呼び出し時間、成長できるデータ構造のサイズ、発生する障害の数などを測定します。
特定の顧客の設定では正常に機能するため、コードが機能することはすでにわかっています。したがって、アプリケーションにインスツルメンテーションを追加することを検討してください。それは、優れたロギングのような信頼性の高いソフトウェアを作成する上で重要な要素の1つです。面白くありませんが、私の意見では、やる必要があります。多くの場合、アプリケーションが展開で実行していることを可視化できる唯一の方法です。私が取り組んでいる現在のアプリケーションは、Rev 1の約20のperfカウンターからRev 2の約150になりました。ほとんどのモニターは常時行いませんが、パフォーマンスと信頼性の問題を警告するために十分価値があります。