逐步解說:剖析 SharePoint 應用程式

本逐步解說將 Visual Studio 顯示如何使用程式碼剖析工具最佳化 SharePoint 應用程式的效能。範例應用程式是包含空的降低功能事件接收器的效能的 SharePoint 功能事件接收器。Visual Studio 分析工具可讓您設定和排除專案,也稱為 作用的路徑中耗費最多資源 (慢速執行的組件)。

本逐步解說將示範下列工作:

  • 將功能事件接收器.

  • 設定和部署 SharePoint 應用程式.

  • 執行 SharePoint 應用程式.

  • 檢視和說明分析結果.

注意事項注意事項

您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱 Visual Studio 設定

必要條件

您需要下列元件才能完成此逐步解說:

建立 SharePoint 專案

首先,在中建立 SharePoint 專案。

建立 SharePoint 專案

  1. 在功能表列上,選擇 [檔案], [新增], [Project] 顯示 [新增專案] 對話方塊。

  2. 展開節點 [SharePoint] 在 [Visual C#] 或 [Visual Basic] 下,然後選取 [2010] 節點。

  3. 在 [範本] 窗格中,選取 [SharePoint 2010 專案] 範本。

  4. 在 [Name]方塊中,輸入 ProfileTest,然後選取 [確定] 按鈕。

    [SharePoint 自訂精靈] 隨即出現。

  5. 在 [指定網站和安全性層級進行偵錯] 頁面上,輸入您想要偵錯網站定義之 SharePoint 伺服器網站的 URL,或使用預設位置 (http://system name/)。

  6. 在 [這是什麼 SharePoint 方案的信任層級?]區段中,選取 [部署為陣列方案] 選項按鈕。

    目前,您只能設定檔陣列方案。如需沙箱化方案與陣列方案的比較的詳細資訊,請參閱沙箱化方案考量

  7. 選取 [完成] 按鈕。專案隨即出現在 [方案總管] 中。

將功能事件接收器

接下來,將功能加入至專案與功能的事件接收器。這個事件接收器會包含要剖析的程式碼。

將功能事件接收器

  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. 在 [效能精靈] 的第一頁,請將程式碼剖析方法做為 [CPU 取樣] 並選取 [下一步] 按鈕。

    其他程式碼剖析方法可用來更進階的程式碼剖析的情況。如需詳細資訊,請參閱認識程式碼剖析方法

  3. 在第 [效能精靈] 的兩個頁面,請將設定檔為目標 [ProfileTest]並選取 [下一步] 按鈕。

    如果方案中有多個專案,其出現在此清單中。

  4. 在 [效能精靈] 的第三個頁面上,清除 [啟用階層互動分析] 核取方塊,然後選取 [下一步] 按鈕。

    設定檔功能的階層互動 (TIP) 度量查詢資料庫應用程式的效能很有用,並為您顯示次數 Web 要求。由於該資料不會針對這個範例需要,我們不會啟用這項功能。

  5. 在 [效能精靈] 的第四個頁面上,保留 [在精靈完成之後的啟動程式碼剖析] 選取核取方塊,然後選取 [完成] 按鈕。

    精靈會在伺服器上啟用應用程式程式碼剖析,顯示 [效能總管] 視窗,然後建置並部署,執行 SharePoint 應用程式。

執行 SharePoint 應用程式

在 SharePoint 中啟動的功能, FeatureActivation 觸發事件程式碼。

執行 SharePoint 應用程式

  1. 在 SharePoint 中,開啟 [[網站動作] 功能表,然後選取 [網站設定]。

  2. 在 [設置動作] 清單中,選取 [管理網站功能] 連結。

  3. 在 [功能] 清單,請在 [ProfileTest Feature1] 選取旁邊的 [啟動] 按鈕。

    有暫停,這樣做時,由於 FeatureActivated 函式呼叫的空環境。

  4. 在 [快速啟動] 長條上,選取 [清單] 然後在 [清單] 清單中,選取 [公告]。

    請注意新的公告加入至處於的清單,啟動功能。

  5. 關閉 SharePoint 網站。

    在您關閉 SharePoint 之後,分析工具會建立並顯示取樣分析報告並儲存,當在 [ProfileTest]專案資料夾中建立 .vsp 檔案。

檢視和說明分析結果

現在您已執行和分析 SharePoint 應用程式,檢視測試結果。

檢視和說明分析結果

  1. 取樣程式碼剖析報表的 [執行最多個別工作的函式] 部分,請注意 TimeCounter 出現在清單頂端附近。

    這表示 TimeCounter 位置是其中一個與範例的高的函式,也就是其中一個應用程式的最大的效能瓶頸。因為它被故意設計為以這種方式為了便於示範,不過,這種情況不意外"。

  2. 在 [執行最多個別工作的函式] 區段中,選取 ProcessRequest 連結顯示 ProcessRequest 函式的成本分配。

    在 ProcessRequest的 [呼叫函式] 部分,請注意 [FeatureActiviated]函式列為耗費最多資源的呼叫的函式。

  3. 在 [呼叫函式] 部分,選取 [FeatureActivated]按鈕。

    在 [FeatureActivated] 的 [呼叫函式] 部分, TimeCounter 函式列為耗費最多資源的呼叫的函式。在 [函式程式碼檢視] 窗格中,反白顯示的程式碼 (TimeCounter) 是作用點並指出更正這個位置是必要的。

  4. 關閉取樣程式碼剖析報表。

    若要再次檢視報告隨時,在 [效能總管] 視窗的 .vsp 檔案。

修正程式碼和 Reprofiling 應用程式

現在 SharePoint 應用程式的作用點函式被識別,請修正。

修正程式碼和 reprofile 應用程式

  1. 在功能事件接收器程式碼標記為註解,請在 FeatureActivated 的 TimeCounter 方法呼叫防止它呼叫。

  2. 儲存專案。

  3. 在 [效能總管],開啟目標資料夾,然後選取 [ProfileTest]節點。

  4. 在 [效能總管] 工具列上,在 [動作] 索引標籤,選取 [啟動程式碼剖析] 按鈕。

    如果您要在 reprofiling 應用程式之前變更任何程式碼剖析屬性,選取 [啟動效能精靈] 按鈕。

  5. 遵循 [執行 SharePoint 應用程式] 部分的指示,先前在本主題。

    現在已經排除,功能應該快速地啟動以 null 的呼叫。取樣程式碼剖析報表應該會反映這種情況。

請參閱

概念

使用程式碼剖析工具分析應用程式效能

程式碼剖析工具效能工作階段概觀

效能分析的初級開發人員指南

其他資源

尋找與 Visual Studio 分析工具的應用程式瓶頸