SharePoint性能总结和一些开发经验(1)

本文提供了针对SharePoint应用开发的性能优化建议,包括提高列表操作效率、合理使用非托管资源、字符串处理技巧等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.        取得列表中的 Item 的数量:

Int  count =  SPContext.Current.List.Items.Count;

这句是取得 Item 的数目,不得不取得列表中的所有的 Item metadata, 这样我们程序运行的速度就会相对慢一些,如果列表中的数据量不大,那不会有明显的影响,如果列表中的数据量很大,那在效率上会有很大的影响。

Int  count =  SPContext.Current.List.ItemCount;// 建议使用这个来取得列表中的 item 数量。

 

2.        显示列表中的 item

SPList  list = SPContext.Current.List;

For(int i=0;i<50;i++)

{

   SPListItem listItem = list.Items[i];

}

这样每次都会请求 SPListItemCollection 集合的新的对象,而使 item 集合对象没有被缓存。因此不断的从数据库请求所有的数据项,对性能上造成很大的影响。

建议的方法是:

SPListItemCollection  item = SPContext.Current.List.Items;

For(int i=0;i<50;i++)

{

   SPListItem item = items[i];

}

3.        取得 item 对象

SPListItem item = SPContext.Current.List.Items[0];

这句主要是从 list 中先取得对象的所有的 Item Metadata ,然后再从这些 Item 的集合中取得到 index 0 Item

建议使用下面语句进行取得 Item 对象:

SPListItem item = SPContext.Current.List.GetItemById(0);

两句 SDK 执行的区别就是我们使用 SQL 语句进行查询的时候,第一没有设置 where 子句的条件,而第二句则是设置了 where 子句的条件,在数据量很大的情况下,这样第二句执行的速度会远远大于第一句执行的速度。

4.        更新大量的 SharePoint 列表数据项

For(int itemIndex=0;itemIndex<100;itemIndex++)

{

   SPListItem newItem = items.Add();

   newItem.Update();

}

实际上 item Add 或是 Update 方法是调用了一个存储过程,来完成这个操作的。

如果需要大量的数据更行的使用建议使用 SPWeb ProcessBatchData 方法进行更新。具体实例如下:

SPContext.Current.Web.ProcessBatchData(queryString);

 

5.        取得 SharePoint 的列表对象

SPList list = SPContext.Current.Web.Lists[title];

这句取得列表对象先从站点中取得所有的 List Metadata title 进行比较,找到符合条件的 list 之后返回。

建议使用下面的方法取得列表对象:

SPList list = SPContext.Current.Web.GetList(listUrl);

SPList list = SPContext.Current.Web.GetListByUrl(listUrl);

6.        SharePoint 中常用的自定义 Feature Location GroupId

位置

自定义操作组 ID

组说明

默认自定义操作 ID

DisplayFormToolbar

N/A

Location 对应于列表的显示表单工具栏。

ExportEventToolbarButton (日历)

ExportContactToolbarButton (联系人)

EditControlBlock

N/A

对应于每项编辑控件块 (ECB) 菜单。

 

EditFormToolbar

N/A

Location 对应于列表的编辑表单工具栏。

 

Microsoft.SharePoint.Administration.ApplicationCreated

链接

已创建应用程序 页。

CreateSite

HomePage

Microsoft.SharePoint.Administration.ApplicationManagement

ApplicationSecurity

管理中心的 应用程序管理 页面上的 应用程序安全性 部分。

·                           WebPartSecurity

·                           SelfService

·                           WebApplicationSecurity

·                           ManagePolicy

ManageAuthenticationProviders

Microsoft.SharePoint.Administration.ApplicationManagement

ExternalService

·                           管理中心的 应用程序管理 页面上的 外部服务连接 部分。

·                           OfficialFile

·                           HtmlViewer

DocConversion

Microsoft.SharePoint.Administration.ApplicationManagement

SiteManagement

·                           管理中心的 应用程序管理 页面上的 “SharePoint 网站管理 部分。

·                           CreateSite

·                           DeleteSite

·                           SiteUse

·                           QuotaDefinition

·                           SiteQuota

·                           SiteOwners

ListSiteCollections

Microsoft.SharePoint.Administration.ApplicationManagement

WebApplicationConfiguration

·                           管理中心的 应用程序管理 页面上的 “SharePoint Web 应用程序管理 部分。

·                           Extend

·                           Unextend

·                           Delete

·                           ManagedPaths

·                           EmailSettings

·                           GeneralSettings

·                           ManageContentDatabases

·                           ManageWebAppFeatures

ListWebApplications

Microsoft.SharePoint.Administration.ApplicationManagement

WorkflowManagement

管理中心的 应用程序管理 页面上的 工作流管理 部分。

WorkflowManagement

Microsoft.SharePoint.Administration.Operations

BackupRestore

管理中心的 操作 页面上的 备份和还原 部分。

·                           Backup

·                           BackupHistory

·                           Restore

BackupStatus

Microsoft.SharePoint.Administration.Operations

DataConfiguration

管理中心的 操作 页面上的 数据配置 部分。

·                           DefaultDatabase

DataRetrieval

Microsoft.SharePoint.Administration.Operations

GlobalConfiguration

·                           管理中心的 操作 页面上的 全局配置 部分。

·                           RunningJobs

·                           JobDefinitions

·                           AlternateAccessMappings

·                           ManageFarmFeatures

Solutions

Microsoft.SharePoint.Administration.Operations

LoggingAndReporting

管理中心的 操作 页面上的 日志记录和报告 部分。

·                           DiagnosticLogging

UsageAnalysis

Microsoft.SharePoint.Administration.Operations

Security

管理中心的 操作 页面上的 安全性配置 部分。

·                           ServiceAccount

·                           Irm

·                           Antivirus

·                           BlockedFileTypes

AdministrationRoles

Microsoft.SharePoint.Administration.Operations

Topology

管理中心的 操作 页面上的 拓扑结构和服务 部分。

·                           FarmServers

·                           TopologyServices

·                           IncomingEmailServer

·                           ApproveDGs

EmailConfiguration

Microsoft.SharePoint.Administration.Operations

Upgrade

管理中心的 操作 页面。

·                           SiteUpgradeStatus

FinalizeUpgrade

Microsoft.SharePoint.ContentTypeSettings

Fields

·                           网站集的 内容类型 页面上的 部分。

·                           AddField

·                           ReorderFields

Microsoft.SharePoint.ContentTypeSettings

General

·                           网站集的 内容类型 页面上的 设置 部分。

·                           ChangeNameDescription

·                           ChangeOptionalSettings

·                           ChangeWorkflowSettings

·                           RemoveContentType

Microsoft.SharePoint.ContentTypeTemplateSettings

Fields

·                           列表的 内容类型 页面上的 部分。

·                           AddField

·                           ReorderFields

Microsoft.SharePoint.ContentTypeTemplateSettings

General

列表的 内容类型 页面上的 设置 部分。

·                           ChangeNameDescriptionGroup

·                           ChangeOptionalSettings

·                           ChangeWorkflowSettings

RemoveContentType

Microsoft.SharePoint.Create

WebPages

创建 页面上的 网页 部分。

 

Microsoft.SharePoint.GroupsPage

NewMenu

网站集的 人员和组 页面上的 新建 菜单。

 

Microsoft.SharePoint.GroupsPage

SettingsMenu

网站集的 人员和组 页面上的 设置 菜单。

 

Microsoft.SharePoint.ListEdit

Communications

列表或文档库的 自定义 页面上的 通信 部分。

 

Microsoft.SharePoint.ListEdit

GeneralSettings

列表的 自定义 页面上的 常规设置 部分。

 

Microsoft.SharePoint.ListEdit

Permissions

列表或文档库的 自定义 页面上的 权限和管理 部分。

 

Microsoft.SharePoint.ListEdit.DocumentLibrary

GeneralSettings

文档库的 自定义 页面上的 常规设置 部分。

 

Microsoft.SharePoint.PeoplePage

ActionsMenu

网站集的 人员和组 页面上的 操作 菜单。

 

Microsoft.SharePoint.PeoplePage

NewMenu

网站集的 人员和组 页面上的 新建 菜单。

 

Microsoft.SharePoint.PeoplePage

SettingsMenu

网站集的 人员和组 页面上的 设置 菜单。

 

Microsoft.SharePoint.SiteSettings

Customization

·                           网站设置 页面上的 外观 部分。

·                           ProjectSettings

·                           NavOptions

·                           Theme

·                           TopNav

·                           QuickLaunch

·                           SaveAsTemplate

·                           ReGhost

Microsoft.SharePoint.SiteSettings

Galleries

·                           网站设置 页面上的 部分。

·                           MasterPageCatalog

·                           ManageCType

·                           ManageField

·                           SiteTemplates

·                           ListTemplates

·                           WebParts

·                           Workflows

Microsoft.SharePoint.SiteSettings

SiteAdministration

·                           网站设置 页面上的 网站管理 部分。

·                           RegionalSettings

·                           LibrariesAndLists

·                           WebUsage

·                           UserAlerts

·                           RSS

·                           SrchVis

·                           ManageSubWebs

·                           ManageSiteFeatures

·                           DeleteWeb

Microsoft.SharePoint.SiteSettings

SiteCollectionAdmin

·                           网站设置 页面上的 网站集管理 部分。

·                           DeletedItems

·                           SiteCollectionUsage

·                           Storage

·                           ManageSiteCollectionFeatures

·                           Hierarchy

·                           Portal

Microsoft.SharePoint.SiteSettings

UsersAndPermissions

·                           网站设置 页面上的 用户和权限 部分。

·                           PeopleAndGroups

·                           SiteCollectionAdministrators

·                           User

Microsoft.SharePoint.StandardMenu

ActionsMenu

列表和文档库视图中的 操作 菜单。

 

Microsoft.SharePoint.StandardMenu

ActionsMenuForSurvey

用于调查的 网站操作 菜单。

 

Microsoft.SharePoint.StandardMenu

NewMenu

列表和文档库视图中的 新建 菜单。

 

Microsoft.SharePoint.StandardMenu

SettingsMenu

列表和文档库视图中的 设置 菜单。

 

Microsoft.SharePoint.StandardMenu

SettingsMenuForSurvey

用于调查的 网站设置 链接。

 

Microsoft.SharePoint.StandardMenu

SiteActions

网站操作 菜单。

 

Microsoft.SharePoint.StandardMenu

UploadMenu

文档库视图中的 上载 菜单。

 

Microsoft.SharePoint.User

ActionsMenu

网站的 权限 页面上的 操作 菜单。

 

Microsoft.SharePoint.User

NewMenu

网站的 权限 页面上的 新建 菜单。

 

Microsoft.SharePoint.User

SettingsMenu

网站的 权限 页面上的 设置 菜单。

 

Microsoft.SharePoint.Workflows

LeftNavBarLinks

用于管理工作流的页面上的左侧导航区域。

 

NewFormToolbar

N/A

Location 对应于列表的新建表单工具栏。

 

ViewToolbar

N/A

Location 对应于列表视图中的工具栏。

 

7.        如果遇到字符串拼接,我们通常使用 StringBuilder ,而不是直接使用字符串直接的链接

字符串直接的链接需要的内存量很大,效率很低。建议方法如下:

StringBuilder msgString =  new StringBuidler();

xmlString.Append(“message1”);

xmlString.Append(“message1”);

 

string message = msgString.ToString();

不建议使用的方法是:

String message = “message1”+”message2”;

特别是在消息字符串很长的情况下。程序运行的效率相当的低。

8.        SharePoint 中有一些对象是非托管的对象,所以需要我们手动进行释放,防止内存泄漏。

例如: SPSite SPWeb 等等其他一些对象。但是需要注意的是我们如果使用全局的 SPWeb ,就不应该进行释放,例如: SPContext.Current.Web 就是一个全局的 Web 对象,当我们使用这个对象的时候,我们不应该把这个对象进行 Dispose

一般的释放非托管对象的方法有两种:

(1)      try ---catch---finally

SPSite site = null;

Try

{

     Site = new SPSite(“http://server:80”);

}

Catch(Exception er)

{

     //TODO:

}

Finally

{

     If(site != null)

{

        Site.Dispose();

}

}

(2)      using

using(SPSite site = new SPSite(“http://server:80”))

{

     //TODO

}

9.        字符串的比较操作

在比较的时候我们应该注意是否忽略大小写,这个地方是很容易出现问题的地方。

String  name1 =  “A”;

String  name2 = “a”;

 

Bool flag = name1.Equals(name2);// flag false

Bool flag = name1.Equals(name2, StringComparison.OrdinalIgnoreCase );//flag true

10.     SharePoint 中我们要设置 folder 的权限,首先我们要打破原有的继承的权限,但是这里有一个问题需要注意一下:

如果使用 folder. Item.BreakRoleInheritance(false) 的时候会抛出一个异常,原因是SharePoint API 中原有这个问题。我们解决这个问题通常使用folder. Item.BreakRoleInheritance(true); 然后我们在删除掉他原有的权限。这样操作之后再给这个folder 赋予新的权限即可。

11.     保持程度的可读性

(1) 在程序中最好不要多次使用 return , 尽量在程序结束或是我们的逻辑完成的时候进行 return 例如:

If(testValue == 1)

{

Return 1;

}

Else if(testValue == 2)

{

   Return 2;

}

…….

建议使用如下方法:

Int returnValue =0;

If(testValue ==1)

{

   returnValue = 1;

}

Elseif(testValue ==2)

{

   returnValue = 2;

 

}

……

Return returnValue;

(2) 在程序中尽量不要使用 GoTo 语句,使用 GoTO 语句使程序非常的不可读,可能之后编写程序的人才懂程序的意思,其他人根本看不懂程序是完成什么功能的,还有可能时间长了,编写程序的人自己也不懂具体是什么意思了,这样会非常糟糕,不利于以后的扩展和维护。

 

12.     判断字符串是否为空串,应该尽量使用下面方法:

String message = “123”;

Bool flag = string.IsNullOrEmpty(message);

我们在初始化一个空字符串的时候,应该尽量使用如下方法:

String str1 = string.Empty;

尽量不要使用 string str2 = “”;

因为这两种内存分配的方式,是不同的, C# 内部处理的机制也是不相同的。

13.     注意 C# 中的拆箱和装箱问题

在编程实践中我们如果使用 List<T> lists = new List<T>(); ,能够解决的问题,最好不要使用 ArrayList Hashtable 等集合,因为 ArrayList Hashtable 这样的集合会存在拆箱和装箱问题,占用程序很大的性能,如果数量过多会严重影响性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值