4

Windows サイドバー ガジェットをコード プロファイリングする方法を知っている人はいますか?

IE8 の "Developer Tools" のコード プロファイリング ツールと Visual Studio 2010 に含まれるコード プロファイリングをいじってみましたが 、私のガジェットが依存しているSystem.*APIを含める方法が見つかりません (そのままです)。サイドバー環境では標準)。このガジェットは、クロスドメイン AJAX リクエストにも依存しています。これは通常、サイドバー環境で許可されています。

コードプロファイリングとは、主に次のことを意味します。

  • 関数呼び出し回数
  • 関数実行時間

Visual Studio 2010 と Performance Wizard を使用して、次のことを試しました。

  • 「ASP.NET または JavaScript アプリケーション」を選択して「インストルメンテーション」モードを使用する。ただし、ガジェットは Windows サイドバーではなく Internet Explorer で開きます
  • 「実行可能」オプションを選択して「インストルメンテーション」モードを使用し、Sidebar.exe を選択します。ただし、「エラー VSP1030: C:\Users\Matt\Desktop\Windows Sidebar\sidebar.exe の PDB ファイルが無効、不一致、または見つかりませんでした」というエラーが表示されます。
  • 「ASP.NET または JavaScript アプリケーション」を選択して「CPU サンプリング」モードを使用する。ただし、ガジェットは Windows サイドバーではなく Internet Explorer で開きます

[分析] -> [プロファイラー] メニューの [プロセスにアタッチ] オプションを使用すると、sidebar.exe プロセスに正常にアタッチできますが、プロファイラーは実際のサイドバー プロセスに関するデータを返し、ガジェットに関する情報は返しません。

ガジェットのプロジェクト/ソリューション ファイルがありません。

よろしく、マット

4

1 に答える 1

2

私はVSプロファイラーチームに所属しているので、明確な質問があれば遠慮なく質問してください。

正確なメトリック(実行時間、呼び出し回数)が必要な場合は、インストルメンテーションを使用する必要があります。インストルメンテーションを使用すると、プロファイラーは、インストルメントしたバイナリと1つのレベルの呼び出し先のデータを表示します(たとえばstring.Concat、インストルメントされたバイナリから直接呼び出す場合、プロファイラーは、呼び出した回数と時間(合計)を表示します電話がかかった)。プロファイラーは、インストルメントしていないバイナリのデータを表示しません。

インストルメンテーションプロファイリングを試しましたか?どんな種類のデータを見ていますか?

必要に応じて、プロファイリングへの統計的アプローチであるサンプリングを試すこともできます。サンプリングはインストルメンテーションよりも軽量であり、CPUが最も多くの作業を行っている場所を高レベルで把握するための最初のパスとして適していることがよくあります。サンプリングを使用すると、プロファイラーは指定された間隔でコールスタックのスナップショットを取得します(これは、デバッガーに侵入して現在実行されているものを確認するのと似ています)。次に、スナップショットを集約してコールツリーを作成します。

あなたがどのようにプロファイリングしようとしているのかについてより良いアイデアを私に与えてくれれば、私はあなたをもっと助けることができます。VSまたはコマンドラインからプロファイラーを使用していますか?サイドバーガジェット用のVSソリューション/プロジェクトはありますか?

詳細については、ブログまたはMSDNドキュメントを確認することもできます。


更新

プロファイラーのJavaScriptプロファイリング機能は主にIE8を対象としていたため、IEJavaScriptエンジンをホストするsidebar.exeなどの別のプロセスに対してデータを収集するかどうかはわかりません。それでも、少なくともプロファイラーを使用して、マネージコードに対してデータを収集できる必要があります。

インストルメンテーションの場合、2番目のオプション(「実行可能ファイル」)を使用する必要があります。パフォーマンスエクスプローラーでは、次の2つのターゲットが必要になります。

  1. インストルメントされていないsidebar.exe (PDBがないため)-ターゲットを右クリックし、[インストルメント]オプションのチェックを外してインストルメンテーションを抑制することができます
  2. foo.dll(ガジェットDLLが呼び出されるものは何でも)、インストルメント化-このターゲットを手動で追加する必要がある場合があります(Targetsフォルダーを右クリックし、[Add Target Binary ...]を選択します)が、必ず[Instrument "オプションを選択し、そのPDBがその隣にあることを確認します

パフォーマンス目標の詳細については、このブログ投稿を参照してください。この設定では、[プロファイリングの開始]ボタンをクリックするだけです。インストルメンテーションが成功し、ガジェットのトレースプロファイリングデータを取得する必要があります。

サンプリングの場合、プロセスを起動またはアタッチできます。プロセスへのアタッチは、次の場合にのみ機能します。

  • プロセスはv4CLRで実行されています。また
  • プロセスには、正しいプロファイリング環境変数が設定されています(これが何を意味するかについては、以下を参照してください)。

v4より前のCLRプロセスのプロファイリングでは、ターゲットプロセスにいくつかの環境変数を設定する必要があります。基本的に、sidebar.exeプロセスを強制終了してから、プロファイラーのコマンドラインツールを使用して再起動する必要があります。これを行う方法のウォークスルーは、MSDNで入手できます

もう1つのオプションであるサンプリング起動は、コマンドライン(MSDNの記事を再度参照)またはVSUIから実行できます。「実行可能ファイル(.EXEファイル)」で「CPUサンプリング」を選択し、現在実行中のsidebar.exeのインスタンスをシャットダウンし、パフォーマンスエクスプローラーで新しく作成されたターゲットを右クリックし、「プロパティ」を選択してコマンドを変更します。 -必要に応じて引数を入力します。その後、プロファイラーの起動が機能するはずです。

他に問題が発生した場合はお知らせください。申し訳ありませんが、これは簡単ではありません。

于 2010-05-19T00:26:43.147 に答える