チュートリアル: SharePoint アプリケーションのプロファイリング

このチュートリアルでは、SharePointアプリケーションのパフォーマンスを最適化するためにVisual Studioにプロファイリング ツールを使用する方法を示します。サンプル アプリケーションは、フィーチャーのイベント レシーバーのパフォーマンスが低下するアイドル ループを含むSharePointフィーチャーのイベント レシーバーです。Visual Studioのプロファイラーはプロジェクト (ホット パスの最も高い (遅延実行) パーツを見つけて削除することができます。

このチュートリアルでは、次のタスクを実行します。

  • 機能および機能のEventレシーバーの追加.

  • SharePointアプリケーションを構成し、配置します.

  • [Running the SharePoint Application].

  • プロファイルのResultを表示、解釈されます.

[!メモ]

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

必須コンポーネント

このチュートリアルを実行するには、次のコンポーネントが必要です。

SharePoint プロジェクトの作成

まず、SharePointのプロジェクトを作成します。

SharePointプロジェクトを作成するには

  1. メニュー バーで、[新しいプロジェクト] のダイアログ ボックスを表示するに [ファイル][新規作成][プロジェクト] を選択します。

  2. [SharePoint] のノードを [Visual C#][Visual Basic]の下に配置し、[2010] のノードを選択します。

  3. テンプレート ペインで、[SharePoint 2010 プロジェクト] テンプレートを選択します。

  4. [名前] ボックスに、ProfileTestを入力し、を [OK] のボタンをクリックします。

    SharePoint カスタマイズ ウィザードが表示されます。

  5. [デバッグのサイトとセキュリティ レベルの指定] ページで、サイト定義をデバッグする SharePoint サーバー サイトの URL を入力するか、既定の場所 (http://<システム名>/) を使用します。

  6. [この SharePoint ソリューションの信頼レベル] のセクションでは、[ファーム ソリューションとして配置する] のオプション ボタンを選択します。

    現在、ファーム ソリューションのみのプロファイリングを描かないできます。サンドボックス ソリューションとファーム ソリューションの違いの詳細については、「サンドボックス ソリューションの考慮事項」を参照してください。

  7. [完了] のボタンをクリックします。ソリューション エクスプローラーにプロジェクトが表示されます。

機能および機能のEventレシーバーの追加

次に、フィーチャーのイベント レシーバーとともにプロジェクトに機能を追加します。このイベント レシーバーは、をプロファイリングするコードが含まれています。

機能およびフィーチャーのイベント レシーバーを追加するには

  1. [ソリューション エクスプローラー]では、[機能] のノードのショートカット メニューを開き、**[フィーチャーの追加]を選択し、既定で、[Feature1]**名前をそのまま使用します。

  2. **[ソリューション エクスプローラー]では、[Feature1]のショートカット メニューを開き、[イベント レシーバーの追加]**を選択します。

    これは、いくつかのコメントされたイベント ハンドラーが追加された機能にコード ファイルを追加し、編集するファイルを開きます。

  3. イベント レシーバー クラスでは、次の変数宣言を追加します。

    ' SharePoint site/subsite.
    Private siteUrl As String = "https://localhost"
    Private webUrl As String = "/"
    
    // SharePoint site/subsite.
    private string siteUrl = "https://localhost";
    private string webUrl = "/";
    
  4. FeatureActivated プロシージャを次のコードに置き換えます。

    Public Overrides Sub FeatureActivated(properties As SPFeatureReceiverProperties)
        Try
            Using site As New SPSite(siteUrl)
                Using web As SPWeb = site.OpenWeb(webUrl)
                    ' Reference the lists.
                    Dim announcementsList As SPList = web.Lists("Announcements")
    
                    ' Add a new announcement to the Announcements list.
                    Dim listItem As SPListItem = announcementsList.Items.Add()
                    listItem("Title") = "Activated Feature: " & Convert.ToString(properties.Definition.DisplayName)
                    listItem("Body") = Convert.ToString(properties.Definition.DisplayName) & " was activated on: " & DateTime.Now.ToString()
                    ' Waste some time.
                    TimeCounter()
                    ' Update the list.
                    listItem.Update()
                End Using
            End Using
    
        Catch e As Exception
            Console.WriteLine("Error: " & e.ToString())
        End Try
    End Sub
    
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            using (SPSite site = new SPSite(siteUrl))
            {
                using (SPWeb web = site.OpenWeb(webUrl))
                {
                    // Reference the lists.
                    SPList announcementsList = web.Lists["Announcements"];
    
                    // Add a new announcement to the Announcements list.
                    SPListItem listItem = announcementsList.Items.Add();
                    listItem["Title"] = "Activated Feature: " + properties.Definition.DisplayName;
                    listItem["Body"] = properties.Definition.DisplayName + " was activated on: " + 
    DateTime.Now.ToString();
                    // Waste some time.
                    TimeCounter();
                    // Update the list.
                    listItem.Update();                        
                }
            }
        }
    
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.ToString());
        }
    }
    
  5. FeatureActivated の手順の下に次のプロシージャを追加します。

    Public Sub TimeCounter()
        Dim result As Integer
        For i As Integer = 0 To 99999
            For j As Integer = 0 To 9999
                result = i * j
            Next j
        Next i
    End Sub
    
    public void TimeCounter()
    {
        for (int i = 0; i < 100000; i++)
        {
            for (int j = 0; j < 10000; j++)
            {
                int result = i * j;
            }
        }
    }
    
  6. [ソリューション エクスプローラー]では、プロジェクト ([ProfileTest]) のショートカット メニューを開き、**[プロパティ]**を選択します。

  7. [プロパティ] のダイアログ ボックスで、[SharePoint] のタブをクリックします。

  8. [アクティブな配置構成] の一覧で、**[アクティブ化なし]**を選択します。

    この配置の構成を選択すると、SharePointフィーチャーを後でアクティブ化を手動で有効にします。

  9. プロジェクトを保存します。

SharePointアプリケーションを構成し、配置します

SharePointプロジェクトの準備ができているため、これを構成し、SharePointサーバーに配置します。

SharePointアプリケーションを配置する構成し、

  1. [分析] で、メニューの **[パフォーマンス ウィザードの起動]**を選択します。

  2. [パフォーマンス ウィザード]の1ページで、プロファイル方法を [CPU サンプリング] として保持し、[次へ] のボタンをクリックします。

    他のプロファイル方法は、高度なプロファイリング状態で使用できます。詳細については、「プロファイル方法について」を参照してください。

  3. [パフォーマンス ウィザード]の2ページで、プロファイリング対象を [ProfileTest] として保持し、[次へ] のボタンをクリックします。

    ソリューションに複数のプロジェクトがある場合、この一覧に表示されます。

  4. [パフォーマンス ウィザード]のページで、3 [階層の相互作用のプロファイルを有効にする] のチェック ボックスをオフにし、[次へ] のボタンをクリックします。

    (TIP)機能のプロファイリングを行う階層相互作用はデータベースを照会する回数を示すようにWebページが要求されるアプリケーションのパフォーマンスを計測するために役立ちます。そのデータがこの例では必要ないため、この機能は有効にしません。

  5. **[パフォーマンス ウィザード]**のページで、4 [Launch profiling after the wizard finishes] のチェック ボックスはオンのまま残し、をに [完了] のボタンをクリックします。

    次に、サーバー アプリケーションのプロファイリングを有効にし、[パフォーマンス エクスプローラー] のウィンドウを表示して、SharePointアプリケーションのビルド、配置、および実行できます。

[Running the SharePoint Application]

実行するコード FeatureActivation のイベントをトリガーするSharePointフィーチャーをアクティブ化します。

SharePointアプリケーションを実行するには

  1. SharePointで、[サイト アクション] のメニューを開き、**[サイトの設定]**を選択します。

  2. [サイト アクション] の一覧で、[サイト機能の管理] のリンクを選択します。

  3. [機能] の一覧で、**[ProfileTest Feature1]**の横に [アクティブ化] のボタンをクリックします。

    この場合 FeatureActivated の関数で呼び出されるアイドル ループで一時停止があります。

  4. 次に [クイック起動] のバーで、[リスト] の一覧の [リスト] を選択します **[お知らせ]**を選択します。

    新しいお知らせがフィーチャーがアクティブ化されたことを示す一覧に追加されていることを確認します。

  5. SharePointサイトを閉じます。

    SharePointの終了後、プロファイラーを作成し、サンプル プロファイル レポートを表示して、[ProfileTest] のプロジェクト フォルダーの.vspファイルとして保存します。

プロファイルのResultを表示、解釈されます

SharePointアプリケーションを実行し、プロファイリングを行っているため、テスト結果を表示します。

プロファイリング結果を表示、解釈するには

  1. サンプル プロファイル レポートの [Functions Doing the Most Individual Work] のセクションでは、TimeCounter がリストの先頭付近であることに注意してください。

    この場所は TimeCounter が意味する多数のサンプルを持つ関数の1つがあることを示しますアプリケーションの最も大きなパフォーマンスのボトルネック1であることを示します。ただし、この状態は、意図にする方法、デモンストレーションのためにデザインされているため、想定外ではありません。

  2. [Functions Doing the Most Individual Work] のセクションでは、ProcessRequest の関数のコスト配分を表示するに ProcessRequest のリンクを選択します。

    ProcessRequestの [呼び出される関数] のセクションでは、[FeatureActiviated] 関数が最も高い呼び出された関数として表示されることに注意してください。

  3. [呼び出される関数] のセクションでは、[FeatureActivated] のボタンをクリックします。

    [FeatureActivated][呼び出される関数] のセクションでは、TimeCounter 関数は、最も高い呼び出された関数として表示されます。[関数コード ビュー] ウィンドウで、次の強調表示されたコード (TimeCounter) は、ホットスポットで、修正が必要である場所を示します。

  4. サンプル プロファイル レポートを閉じます。

    レポートを再表示するには、[パフォーマンス エクスプローラー] ウィンドウで.vspファイルを開きます。

コードを修正アプリケーションとReprofiling

SharePointアプリケーションのホットスポットの関数を特定したので、これを修正。

コードを修正するとアプリケーションreprofile

  1. フィーチャーのイベント レシーバー コードでは、TimeCounter のメソッド呼び出しはされないよう FeatureActivated に呼び出されることをコメント アウトします。

  2. プロジェクトを保存します。

  3. [パフォーマンス エクスプローラー]では、対象となるフォルダーを開き、[ProfileTest] のノードを選択します。

  4. [パフォーマンス エクスプローラー] のツール バーで、[アクション] のタブで、[プロファイルの開始] のボタンをクリックします。

    アプリケーションをreprofiling前にプロファイル プロパティ変更する場合は、[パフォーマンス ウィザードの起動] のボタンを選択します。

  5. このトピックの [Running the SharePoint Application] のセクションの指示に、前に従います。

    機能は、アイドル ループの呼び出しが削除されているため、よりすばやくアクティブにする必要があります。サンプル プロファイル レポートはこれを反映する必要があります。

参照

概念

プロファイリング ツールを使用したアプリケーション パフォーマンスの分析

プロファイリング ツールのパフォーマンス セッションの概要

パフォーマンス プロファイリングのビギナーズ ガイド

その他の技術情報

Visual Studioのプロファイラーを使用して、検索のアプリケーションのボトルネック