Visual Studio 2010:新しいプロファイラーの使用

プロファイラーの新しい要約ページを使用すると、パフォーマンスの問題を簡単に見つけて修正できることを実証できましたが、検索に手間がかかる場合があります。 今回は、機能の詳細ビューと呼ばれるVS2010の別の機能についてさらに詳しく説明します。



繰り返しますが、デモンストレーションのために、CodeBox からダウンロードできるPeopleTraxアプリケーションを使用します。 プロファイラーのCPUサンプリング機能を使用して以前に収集したレポートがあります。この機能では、アプリケーションが(少なくとも1つのコアで)CPUに大きな負荷をかけます。



このレポートでは、ホットパスを見て、People.GetNamesメソッドが2つのホット関数StringReader.ReadLine()およびString.Trim()を呼び出すことを確認します。







これらのリソースを大量に消費する呼び出しをコードで表示したいので、GetNames(上記の紫色で強調表示)をクリックして、関数の詳細を示すウィンドウを表示します。







注意する価値のあるものがいくつかあります。



これで、ビューの右側で、コード内でReadLine()およびTrim()関数へのリソース集約的な呼び出しが発生する場所が明確にわかります。 さらに、関数のパフォーマンスの詳細セクションにメトリック表とトピックに関する便利なリンクがあります。



それでは、青いサイコロを見てみましょう。 左のプレートは、関数を呼び出すメソッドを示しています。 プレートの高さは、現在選択されているメトリック(この場合は包含サンプル)の相対値を表します。 この場合、呼び出しメソッドは1つしかないため、プレートの領域全体を占有します。



右側には、次のセクションを含む別のダイがあります。 これらの各セクション(関数本体を除く)はクリック可能です。これにより、呼び出し中または呼び出されたメソッドをナビゲートできます。



コードを勉強したが、それを単純化する簡単な解決策を見つけることができず、Trim()またはReadLine()の操作を制御できないため、GetPeople(これがGetNamesメソッドを呼び出す唯一の関数です) -約Transl。)。







GetPeopleをクリックすると、この機能の詳細に移行します。







右側のコードから、GetNamesメソッドの2つの強調表示された呼び出しが呼び出し(インスタンス)の89.2%を形成していることがわかります。 ループが使用されているため、GetNames呼び出しをループから取得することをお勧めします。 PeopleTraxアプリケーションを研究している人は、このアプリケーションの最初の最適化はコンストラクターでGetNames呼び出しをキャッシュすることであることを知っています。 調査の次のステップは、コードの変更、新しいプロファイリング情報の収集、およびレポートの比較です。ただし、これについてはお任せします。



留意してください:コード行レベルの情報は、CPUサンプリングプロファイリングモードでのみ使用でき、インストルメンテーションモードでは使用できません。 強調表示と注釈は、インストルメンテーションモードでも使用できません。



プログイット




All Articles