演练:分析 SharePoint 应用程序

本演练演示如何在 Visual Studio 中使用分析工具优化 SharePoint 应用程序的性能。示例应用程序是包含空闲循环降低功能事件接收器的性能的 SharePoint 功能事件接收器。Visual Studio 探查器可以设置和消除该项,也称为 热路径的开销最大的 (较慢执行的) 部分。

本演练将演示以下任务:

  • 添加功能和功能事件接收器.

  • 配置和部署 SharePoint 应用程序.

  • 运行 SharePoint 应用程序.

  • 查看和解释分析结果.

说明说明

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

系统必备

您需要以下组件来完成本演练:

创建 SharePoint 项目

首先,创建一个 SharePoint 项目。

创建 SharePoint 项目

  1. 在菜单栏上,依次选择 文件新建项目 显示 新建项目 对话框。

  2. 外接 SharePoint 节点。visual C#Visual Basic下,然后选择 2010 节点。

  3. 在模板窗格中,选择 SharePoint 2010 项目 模板。

  4. 名称 框中,输入 ProfileTest,然后选择 确定 按钮。

    这将显示**“SharePoint 自定义向导”**。

  5. 在**“指定用于调试的网站和安全级别”**页上,输入要在其中调试网站定义的 SharePoint Server 网站的 URL,或者使用默认位置 (http://系统名称/)。

  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 server。

配置和部署 SharePoint 应用程序

  1. 分析 菜单中,选择 启动性能向导

  2. 性能向导的第一页上,保留分析方法作为 CPU 采样 并选择 下一步 按钮。

    其他分析方法可用于更高级分析的情况。有关更多信息,请参见了解分析方法

  3. 性能向导的第二页上,保留配置文件为目标 ProfileTest 并选择 下一步 按钮。

    如果解决方案包含多个项目,这些消息中列出。

  4. 性能向导的第三页上,清除 启用层交互分析 复选框,然后选择 下一步 按钮。

    分析 (TIP) 功能的层交互用于测量查询数据库应用程序的性能非常有用,并且用于显示您次数网页请求。由于该信息不支持此示例需要,我们不会启用此功能。

  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 应用程序 部分的说明,本主题前面。

    现在,已取消,函数应快速地激活到空闲循环的调用。分析报告的示例应反映此操作。

请参见

概念

使用分析工具对应用程序性能进行分析

分析工具性能会话概述

性能分析初学者指南

其他资源

查找与 Visual Studio 探查器的应用程序瓶颈