パフォーマンスと診断のページからの分析ツールの実行

Windows と Windows Phone に適用されます

Visual Studio プロファイラーと診断ツールを使用して、Windows ストア アプリおよび Windows Phone アプリのパフォーマンス、メモリ使用量、エネルギー消費を分析できます。 パフォーマンスと診断ハブを使用すると、これらのツールを選択して実行し、1 つの診断に複数のツールの組み合わせ、それらが生成したレポートを管理することが簡単にできます。 ほとんどの配置ターゲットでツールを実行できます。 Windows Phone アプリには、電話またはエミュレーターを使用します。 Windows ストア アプリには、Visual Studio コンピューター、シミュレーター、またはリモート PC を使用します。 データを収集したら、診断レポートにタイムライン グラフとデータの詳細ビューが表示されます。 パフォーマンスと診断レポートのフィルターと設定を使用して、データの重要な部分にフォーカスすることができます。

パフォーマンスと診断ハブのツール

パフォーマンスと診断ハブには、特定の種類のアプリ (XAML と C#/VB/C++ または HTML と JavaScript) で使用できるツールと単一の診断で使用できるツールが示されます。

CPU の使用 (すべて)

エネルギー消費 (すべて)

メモリ使用量 (C#/VB/C++)

JavaScript メモリ使用量

XAML UI の応答性

HTML UI の応答性

JavaScript 関数タイミング

この記事の内容

  • クイック スタート: 診断データの収集

  • 診断データの収集

    ユーザー マークを追加して、診断データでの場所を識別します。 | スタートアップ プロジェクトの設定 | 分析ターゲットの設定 | 診断セッションで実行するツールの選択 | 診断セッションの開始と停止

  • 診断セッション ファイルを開く

  • パフォーマンスと診断データ ページ

  • トラブルシューティング

クイック スタート: 診断データの収集

注意

パフォーマンスと診断ツールを実行するには、管理者特権が必要です。管理者として Visual Studio を実行することもできますし、診断セッションを開始するときに管理者としてのツールの実行を選択することもできます。

  1. Visual Studio でプロジェクトを開きます。

  2. 配置場所を設定します。

    Windows Phone のみに適用されます

    Windows Phone アプリは電話または Visual Studio エミュレーターの 1 つに配置できます。

    Windows のみに適用されます

    Windows ストア アプリは、Visual Studio コンピューター、Visual Studio シミュレーター、またはネットワークに接続されたコンピューターまたはタブレットに配置できます。

    メモ: リモート PC またはタブレットで診断セッションを実行するには、Visual Studio Remote Tools がインストールされていて、リモート ターゲットで実行されている必要があります。 以下を参照してください。リモート マシンでの Visual Studio からの Windows ストア アプリの実行

    デバッガーのツール バーのデバッグの場所の一覧で、アプリの配置場所を選択します。 次に電話アプリの一覧を示します。

    Windows Phone アプリの配置ターゲット リスト

  3. パフォーマンスと診断セッションを開きます。 [デバック] メニューの [パフォーマンスと診断] をクリックします (ショートカット キー: Alt + F2 キー)。

  4. パフォーマンスと診断ハブで、1 つ以上のツールを選択して、セッションで実行します。 プロジェクトの種類およびプログラミング言語に適用されるツールのみが表示されます。 診断ツールを選択すると、同じ診断セッションで実行できないツールの選択が無効になります。 次に、選択したツールが JavaScript アプリを検索する方法を示します。

    1 つまたは複数の診断ツールを選択

  5. 診断セッションを開始するには、[開始] をクリックします。

  6. データを収集するシナリオを実行します。

    セッションを実行している間に、ツールによってはパフォーマンスと診断ページのリアルタイム データが表示されます。

    [パフォーマンスと診断] ページでデータを収集

  7. 診断セッションを終了するには、[コレクションの停止] をクリックします。

診断データの収集

ユーザー マークを追加して、診断データでの場所を識別します。 | スタートアップ プロジェクトの設定 | 分析ターゲットの設定 | 診断セッションで実行するツールの選択 | 診断セッションの開始と停止

ユーザー マークを追加して、診断データでの場所を識別します。

また、タイムライン ルーラーの領域を識別できるようにプロファイル データにユーザー マークを追加できます。

タイムライン上のユーザー マーク

マークは、タイムライン上でメソッドが実行された時点に、オレンジ色の三角形として表示されます。 マークの上にマウス ポインターを置くと、メッセージと時刻がツールヒントとして表示されます。 複数のユーザー マークが近接している場合、マークはマージされてツールヒントのデータはまとめられます。 タイムラインの表示を拡大すると、マークを分離できます。

注意

  • JavaScript 関数タイミング レポートにユーザー マークは表示されません。

  • CPU 使用率ツールが診断セッションで使用された唯一のツールである場合、レポートにユーザー マークは表示されません。

  • 他の例については、Windows SDK サンプル LoggingSession Sample を参照してください。

C#、Visual Basic、C++ コードへのマークの追加

C#、Visual Basic、C++ コードにマークを追加するには、まず Windows.Foundation.Diagnostics LoggingChannel オブジェクトを作成します。 次に、マークするコードの位置に LoggingChannel.LogMessage メソッドの呼び出しを挿入します。 呼び出しでは LoggingLevel.Information を使用します。

メソッドが実行されると、ユーザー マークがメッセージと共にプロファイル データに追加されます。

説明

コードにログ チャネルを追加する場合には、いくつかの課題があります。

ログを開く各チャネルには一意の名前が指定されている必要があります。 開いているチャンネルと同じ名前の新しいログ チャンネルを作成しようとすると、例外が発生します。

コードで名前が重複するのを避ける 1 つの方法は、静的 (VB の場合は共有) メソッドを使用して、固有の名前が保証されている LoggingChannel を返すことです。 固有の名前を提供するための GUID の使用例:

//using Windows.Foundation.Diagnostics
public static LoggingChannel GetLoggingChannel()
{
    var name = Guid.NewGuid().ToString();
    return new LoggingChannel(name);
}
'Imports Windows.Foundation.Diagnostics
Public Shared Function GetLoggingChannel() As LoggingChannel
    Dim Name = Guid.NewGuid().ToString()
    GetLoggingChannel = New LoggingChannel(Name)
End Function
//using namespace Windows::Foundation::Diagnostics;
static LoggingChannel^ MainPage::GetLoggingChannel()
{
    auto name = (ref new Guid())->ToString();
    auto channel = ref new LoggingChannel(name);
    return channel;
}

C# および VB: LoggingChannel オブジェクトの破棄

LoggingChannel オブジェクトはシステム リソースを使用するため、LoggingChannel の C# および VB のプロジェクションは System.IDisposableインターフェイスから派生しており、オブジェクトが CLR ガベージ コレクターによって破棄される前にリソースをリリースすることができます。 C++ コードでは、LoggingChannel オブジェクトがスコープ外に出ると、すぐにオブジェクトが破棄され、リソースがリリースされます。 ユーザー マークを診断セッション ファイルに追加する場合に使えるパターンの例を示します。

void MyScenario()
{
    var logLevel = LoggingLevel.Information;
    using(var channel = Utils.GetLoggingChannel())
    {
        channel.LogMessage("MyScenario Start", logLevel);
        // scenario code
        channel.LogMessage("MyScenario End", logLevel);
    }
}
Sub MyScenario()
    Dim logLevel = LoggingLevel.Information
    Using channel As LoggingChannel = Utils.GetLoggingChannel()
        channel.LogMessage("MyScenario Start", logLevel)
        'scenario code
        channel.LogMessage("MyScenario End", logLevel)
    End Using
End Sub
// m_channel resources are released when containing 
// object goes out of scope
LoggingChannel^ m_channel = MainPage::GetLoggingChannel();
LoggingLevel m_logLevel = LoggingLevel::Information;

void MyScenario()
{
    m_channel->LogMessage(L"MyScenario Start", m_logLevel);
    //scenario code
    m_channel->LogMessage(L"MyScenario Start", m_logLevel);
}

マークの JavaScript コードへの追加

ユーザー マークを追加するには、マークするコードの位置に次のコードを追加します。

if (performance && performance.mark) {
    performance.mark(markDescription);
}

markDescription は、ユーザー マークのツールヒントに表示されるメッセージを含む文字列です。

スタートアップ プロジェクトの設定

ソリューションに複数のアプリ プロジェクトが含まれている場合は、分析するプロジェクトがスタートアップ プロジェクトとして設定されていることを確認してください。 ソリューション エクスプローラーで、プロジェクトを選択し、コンテキスト メニューの [スタートアップ プロジェクトに設定] をクリックします。

[スタートアップ プロジェクトに設定] をクリック

配置場所の設定

Visual Studio コンピューターに直接接続されている Windows Phone または Visual Studio Phone エミュレーターで、電話アプリの診断セッションを実行できます。 Windows ストア アプリは、Visual Studio コンピューター、Visual Studio デバイス シミュレーター、またはネットワークで Visual Studio に接続されているか、USB ケーブルを使用したイーサネットで Visual Studio コンピューターに直接接続されているリモート デバイスで実行できます。 プロジェクト プロパティのデバッグ ページに配置ターゲットを設定することも、Visual Studio ツール バーのデバッグの場所の一覧からターゲットを選択することもできます。 次に、Windows ストア アプリの配置リストを示します。

Windows ストア アプリの配置ターゲット リスト

[デバッグの場所] ツール バーでの選択内容がプロジェクト プロパティに保存されます。

Windows のみに適用されます

  • リモート Windows ストア デバイスで診断セッションを実行するには、Visual Studio Remote Tools がインストールされていて、リモート ターゲットで実行されている必要があります。 以下を参照してください。リモート マシンでの Visual Studio からの Windows ストア アプリの実行

  • デバッグの場所の一覧でリモート コンピューターを選択するときにリモート デバイスを指定していない場合は、表示される [リモート接続] ダイアログ ボックスでデバイスを指定します。

    [リモート接続] ダイアログ ボックス

  • リモート デバイス ターゲットを指定したら、プロジェクト プロパティの [デバッグ] ページを使用して新しいデバイスに変更する必要があります。

  • リモート デバイスを Visual Studio に接続するために USB イーサネット ケーブルを使用している場合は、 [リモート接続] ダイアログ ボックスでリモート デバイスの IP アドレスを指定します。

分析ターゲットの設定

Visual Studio プロジェクトからアプリを起動するだけでなく、別のターゲットの診断セッションを実行することもできます。 たとえば、Windows App Store からインストールしたアプリのバージョンのパフォーマンスの問題を診断します。

診断ツールの分析ターゲットを選択

Windows のみに適用されます

デバイスに既にインストールされている Windows ストア アプリを起動することもできますし、既に実行している Windows ストア アプリに診断ツールをアタッチすることもできます。 実行中のアプリまたはインストール済みのアプリを選択する場合は、指定された配置ターゲットでアプリを検索するリストからアプリを選択します。

診断用の実行中またはインストール済みのアプリを選択

Windows Phone のみに適用されます

Internet Explorer を選択する場合、URL を指定して、電話の配置ターゲットを変更できます。

Internet Explorer に表示する url を指定

診断セッションで実行するツールの選択

パフォーマンスと診断ハブで、1 つ以上のツールを選択して診断セッションを実行します。 プロジェクトの種類およびプログラミングに適用されるツールのみが表示されます。 診断ツールを選択すると、同じ診断セッションで実行できないツールの選択が無効になります。 次に、選択したツールが JavaScript アプリを検索する方法を示します。

診断セッションの開始と停止

診断セッションを開始するには、[開始] をクリックします。

診断セッションを終了して、データ分析を開始するには、ページの下部にある [コレクションの停止] をクリックします。

診断セッション ファイルを開く

診断セッションでデータのコレクションを停止すると、データはすぐに分析されて、パフォーマンスと診断レポートに表示されます。

また、パフォーマンスと診断ハブで直前に開かれた一覧から保存された .diagnosis セッション ファイルを開くことができます。

保存済みの診断セッション ファイルを開く

パフォーマンスと診断ハブの上部の [表示または非表示] ボタンをクリックして、直前に使用されたファイル リストを展開するか、または折りたたみます。

パフォーマンスと診断レポート

[パフォーマンスと診断] データ ページ

手順 1.

タイムラインは、プロファイル セッションの長さ、アプリケーションのアクティブ化ライフサイクル イベント、ユーザー マークを示します。

手順 2.

青いバーをドラッグしてタイムラインの領域を選択することにより、レポートをタイムラインの一部だけに制限できます。

手順 3.

ツールは 1 つ以上のマスター グラフを表示します。 診断セッションが複数のツールで作成されているときは、すべてのマスター グラフが表示されます。

手順 4.

各グラフは展開したり、折りたたんだりできます。

手順 5.

データに複数のツールからの情報が含まれている場合、ツールの詳細はタブに収集されます。

手順 6.

ツールは 1 つ以上の詳細ビューを持つことができます。 ビューはタイムラインの選択された領域でフィルター処理されます。

トラブルシューティング

診断イベントがドロップしました。レポートの一部の情報が不足しているか、正しくない可能性があります。

パフォーマンスと診断ツールでデータを収集すると、メモリおよび CPU の使用率が高くなることがあります。 データ収集ですべての診断イベントをログ記録できない場合、[パフォーマンスと診断] ページ上部にある情報バーにメッセージが表示されます。 レポートの一部のデータが不足しているか、無効である可能性があります。

この問題を解決するには、次の手順を実行してコンピューターのリソースの空き容量を増加させてから、診断セッションを再試行してみてください。

  1. 診断セッションの一部でないその他のアプリを閉じます。

  2. 収集するデータが少なくなるように、シナリオを簡略化します。

  3. 1 セッションで使用する診断ツールを少なくします。

参照

その他の技術情報

パフォーマンス (Windows ストア アプリ)

Windows SDK LoggingSession サンプル