
繰り返しますが、デモンストレーションのために、CodeBox からダウンロードできるPeopleTraxアプリケーションを使用します。 プロファイラーのCPUサンプリング機能を使用して以前に収集したレポートがあります。この機能では、アプリケーションが(少なくとも1つのコアで)CPUに大きな負荷をかけます。
このレポートでは、ホットパスを見て、People.GetNamesメソッドが2つのホット関数StringReader.ReadLine()およびString.Trim()を呼び出すことを確認します。

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

注意する価値のあるものがいくつかあります。
- タイトルはPeople.GetNames()メソッドの名前を示します。
- ドロップダウンメニューを使用して、「Inclusive Samples%」と「Inclusive Samples」を切り替えることができます。
- 青いサイコロは、People.GetNames()メソッドを呼び出す関数または呼び出される関数を示しています。
- 興味のあるコードは、強調表示と注釈付きで表示されます。
- デフォルトビューでは、すべてのコードを表示するためにウィンドウを展開する必要がある場合があります。 代わりに、「画面を垂直に分割」ボタンを使用してビューを変更できます。

これで、ビューの右側で、コード内でReadLine()およびTrim()関数へのリソース集約的な呼び出しが発生する場所が明確にわかります。 さらに、関数のパフォーマンスの詳細セクションにメトリック表とトピックに関する便利なリンクがあります。
それでは、青いサイコロを見てみましょう。 左のプレートは、関数を呼び出すメソッドを示しています。 プレートの高さは、現在選択されているメトリック(この場合は包含サンプル)の相対値を表します。 この場合、呼び出しメソッドは1つしかないため、プレートの領域全体を占有します。
右側には、次のセクションを含む別のダイがあります。
- 関数本体(87コピー)。 このセクションの高さは、関数自体内のインスタンスの相対数を示しています。
- ReadLine(727コピー)。 これは、インスタンスの数が最も多い関数です(包含サンプル)。 このため、このセクションの高さは最大です。
- トリム(642コピー)。 この関数は、インスタンス数(包括的サンプル)の2番目です。 わずかに低いセクションの高さ。
- そして、より少ないインスタンスを持つ他の機能。
コードを勉強したが、それを単純化する簡単な解決策を見つけることができず、Trim()またはReadLine()の操作を制御できないため、GetPeople(これがGetNamesメソッドを呼び出す唯一の関数です) -約Transl。)。

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

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