SharePoint 2010调试(2):开发人员面板
4 min read

SharePoint 2010调试(2):开发人员面板

开发人员面板是SharePoint 2010新增的一个功能,它可以根据需要在页面下方显示当前页面从加载到呈现完毕所执行的各种步骤的耗时情况,以及Web服务器、声明和关键事件、数据库查询、服务调用、SPRequest、Web部件事件偏移等耗时情况。

SharePoint 2010 开发人员面板

上图便是开发人员面板的一个样例,更多详细信息以及开关方式可以参考Kaneboy的日志《SharePoint 2010 新体验6 – 开发人员面板》,本文会介绍开发人员面板的另外一些细节。

定制开发人员面板

我们可以通过SPDeveloperDashboardSettings类来控制开发人员面板,该类的实例可以从SPWebService.ContentService.DeveloperDashboardSettings中得到,下面是一些我们可以进行定制的内容:

  • DisplayLevel:面板的显示方式,可以设置为Off、On和OnDemand,默认值为Off;
  • MaximumCriticalEventsToTrack:单次请求中最多跟踪多少个事件;
  • MaximumSQLQueriesToTrack:单次请求中最多跟踪多少个SQL查询;
  • RequiredPermissions:查看面板所需要的权限,默认值为AddAndCustomizePages;
  • TraceEnabled:是否启用详细的追踪信息,启用后会在开发人员面板下方额外显示更加详细的追踪信息,默认值为false;
  • EnableDiagnosticMode():启用诊断模式,调用此方法会将DisplayLevel设置为OnDemand、将RequiredPermissions设置为EmptyMask并将TraceEnabled设置为true;
  • DisableDiagnosticMode():禁用诊断模式,调用此方法会将DisplayLevel、RequiredPermissions和TraceEnabled的值恢复为默认值。

更改后,不要忘记调用Update方法来更新到SharePoint。

下图是启用详细追踪信息之后的效果,信息非常之多,注意滚动条:

开发人员面板的其他追踪信息

监视自己编写的代码

有时候我们需要在自己写的代码中揪出影响性能的罪魁祸首,我们就会希望开发人员面板能够跟踪并显示我们的某段代码的执行情况,SPMonitoredScope类(位于Microsoft.SharePoint.Utilities命名空间)可以帮助我们达到这个目的(但仅适用于完全信任的解决方案)。

SPMonitoredScope的使用方法很简单:

using (new SPMonitoredScope("Display user name"))
{
control.Text = "Hello, " + SPContext.Current.Web.CurrentUser.Name;
}

上面这段代码中的SPMonitoredScope构造函数只接受一个字符串作为名称,SPMonitoredScope还有另外一个构造函数,除了字符串名称之外,还接受一个整型值来表示预估的最大执行时间(超出此时间后,开发人员面板会将其高亮标识起来)以及一个ISPScopedPerformanceMonitor对象数组。

SharePoint已经提供了ISPScopedPerformanceMonitor的几个实现:

  • SPCriticalTraceCounter:跟踪关键事件,收集诸如事件文本、ID和调用堆栈等信息;
  • SPExecutionTimeCounter:统计关于执行时间的详细信息;
  • SPRequestUsageCounter:统计SPRequest对象的数量;
  • SPSqlQueryCounter:跟踪SQL查询,收集SqlQueryData文本、调研堆栈以及执行时间等信息。

例如:

using (new SPMonitoredScope("Sleep", 1000, new SPSqlQueryCounter(5), new SPCriticalTraceCounter()))
{
Thread.Sleep(5000);
}

下图是上面两段代码执行之后的效果,注意Sleep因为超过了我们期望的耗时而被高亮显示:

跟踪自定义代码

Configuration Feature

最后介绍一个第三方Feature,它可以在SharePoint管理中心中添加一个开发人员面板的控制界面,我们可以通过它来控制开发人员面板的显示状态、最大跟踪数量、权限等等。具体信息请移步这里