MOSS--SharePoint 开发学习一些总结
开发过程的一些性能总结
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(inti=0;i<50;i++)
{
SPListItem listItem = list.Items[i];
}
这样每次都会请求SPListItemCollection集合的新的对象,而使item集合对象没有被缓存。因此不断的从数据库请求所有的数据项,对性能上造成很大的影响。
建议的方法是:
SPListItemCollection item = SPContext.Current.List.Items;
For(inti=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(intitemIndex=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. 如果遇到字符串拼接,我们通常使用StringBuilder,而不是直接使用字符串直接的链接
字符串直接的链接需要的内存量很大,效率很低。建议方法如下:
StringBuilder msgString =newStringBuidler();
xmlString.Append(“message1”);
xmlString.Append(“message1”);
string message = msgString.ToString();
不建议使用的方法是:
String message = “message1”+”message2”;
特别是在消息字符串很长的情况下。程序运行的效率相当的低。
7. SharePoint中有一些对象是非托管的对象,所以需要我们手动进行释放,防止内存泄漏。
例如:SPSite,SPWeb等等其他一些对象。但是需要注意的是我们如果使用全局的SPWeb,就不应该进行释放,例如:SPContext.Current.Web就是一个全局的Web对象,当我们使用这个对象的时候,我们不应该把这个对象进行Dispose。
一般的释放非托管对象的方法有两种:
(1) try ---catch---finally
SPSite site = null;
Try
{
Site =newSPSite(“http://server:80”);
}
Catch(Exception er)
{
//TODO:
}
Finally
{
If(site !=null)
{
Site.Dispose();
}
}
(2) using
using(SPSite site =newSPSite(“http://server:80”))
{
//TODO
}
8. 字符串的比较操作
在比较的时候我们应该注意是否忽略大小写,这个地方是很容易出现问题的地方。
String name1 = “A”;
String name2 = “a”;
Bool flag = name1.Equals(name2);// flag 是false
Bool flag = name1.Equals(name2, StringComparison.OrdinalIgnoreCase);//flag 是true
9. 在SharePoint中我们要设置folder的权限,首先我们要打破原有的继承的权限,但是这里有一个问题需要注意一下:
如果使用folder.Item.BreakRoleInheritance(false)的时候会抛出一个异常,原因是SharePoint API中原有这个问题。我们解决这个问题通常使用folder. Item.BreakRoleInheritance(true);然后我们在删除掉他原有的权限。这样操作之后再给这个folder赋予新的权限即可。
10. 保持程度的可读性
(1) 在程序中最好不要多次使用return , 尽量在程序结束或是我们的逻辑完成的时候进行return例如:
1
2
3
4
5
6
7
8
9
10
|
If(testValue == 1)
{
Return 1;
}
Else if (testValue == 2)
{
Return 2;
}
…….
|
建议使用如下方法:
1
2
3
4
5
6
7
8
9
10
11
|
Int returnValue =0;
If(testValue ==1)
{
returnValue = 1;
}
Elseif(testValue ==2)
{
returnValue = 2;
}
……
Return returnValue;
|
(2) 在程序中尽量不要使用GoTo语句,使用GoTO语句使程序非常的不可读,可能之后编写程序的人才懂程序的意思,其他人根本看不懂程序是完成什么功能的,还有可能时间长了,编写程序的人自己也不懂具体是什么意思了,这样会非常糟糕,不利于以后的扩展和维护。
11. 判断字符串是否为空串,应该尽量使用下面方法:
String message = “123”;
Bool flag = string.IsNullOrEmpty(message);
我们在初始化一个空字符串的时候,应该尽量使用如下方法:
String str1 = string.Empty;
尽量不要使用 string str2 = “”;
因为这两种内存分配的方式,是不同的,C#内部处理的机制也是不相同的。
12. 注意C#中的拆箱和装箱问题
在编程实践中我们如果使用List<T> lists = new List<T>();,能够解决的问题,最好不要使用ArrayList和Hashtable等集合,因为ArrayList、Hashtable这样的集合会存在拆箱和装箱问题,占用程序很大的性能,如果数量过多会严重影响性能。
13. SharePoint中的非托管对象需要我们手动释放资源
SPGlobalAdmin、SPSite、SPWeb、SPFileStream等等一些对象需要进行手动释放资源。由于SharePoint中有这些非托管对象,所以我们编程的时候应该特别注意,如果有些资源没有释放,会造成内存溢出。并且很多时候我们自定义的程序是由IIS调用的,如果没有释放资源,可能会是IIS 崩溃,造成不必要的麻烦。
14. SharePoint中不能上传大小为0 KB的文件,由于SharePoint上传文档的时候会将这个文件的内容一并写进数据库的Content字段,如果文件的大小是0,则这个byte [] 将没有内容,所以不会成功。如果我们要对0KB的文件进行上传的话,我们需要使用程序进行特殊处理:
一是可以在这个文件中添加我们的标识信息,当取得其中的内容的时候我们也可以将标识信息去掉,然后就是内容信息。或者使用API也是可以处理添加0 KB 文件的。或者使用Explorer View进行上传也可以上传大小为0 KB的文件。
15. 当SharePoint中list打开Version开关的时候,我们可以对文档的操作进行使用版本控制,并且可以根据不同时间的修改产生的不同的version来取得不同version的文档。在这里下载不同的version的文档有不同的地址,我们可以根据version来计算这个文档的地址。如果打开Major Version的时候version会按照1.0、2.0、、、递增,如果是打开Major和Minor Version的时候version会按照0.1、0.2、、、递增,当前的也就是version最大的文档的地址是正常的,历史的version的文档的地址是不同的,在站点url后面加上_vti_history/version的个位*512 + 小数点后的数字/文档url。
16. SharePoint中的内存泄漏问题
(1) 当使用 list.ParentWeb,或folder.ParentWeb 等等只要使用这个ParentWeb属性,那么这个ParentWeb是需要释放的。
(2) 同样道理,我们只要使用了web.Site属性,那么这个Site对象是需要释放的。
(3) 我们一般对这两个对象进行释放的时候,都是使用Dispose()方法,其实Dispose()方法内部也只是简单的调用了Close()方法,但是我们还是建议使用Dispose()方法进行释放。这样不会造成一些SharePoint API自身产生的一些错误。
(4) 使用OpenWeb()方法和SelfServiceCreateSite()方法时都会返回一个SPWeb对象,这些对象都需要进行手动释放。
(5) 我们使用索引器取得Site或是Web的时候,都需要进行手动释放,因为我们去的了SPWeb和SPSite都会在内存中申请相应的空间,但是由于是非托管的对象所以我们还是以需要进行手动释放的。
(6) 当我们使用SPSite的LockIssue、Owner、SecondaryContact属性的时候,会隐式的调用RootWeb属性,所以我们需要对这个RootWeb对象进行释放。
MOSS--SharePoint 开发学习一些总结相关推荐
- 步步为营 SharePoint 开发学习笔记系列 七、SharePoint Timer Job 开发
概要 项目需求要求我们每天晚上同步员工的一些信息到sharepoint 的user List ,我们决定定制开发sharepoint timer Job,Sharepoint timer Job是sh ...
- sharepoint 2010 moss 培训教程 sharepoint开发经常需要用到的一些基本知识点
列一下之前做的一些关于moss,sharepoint 2010的培训课程,主要是sharepoint开发经常需要用到的一些基本知识点. sharepoint应用篇 1.sharepoint 安装与部署 ...
- Moss/Sharepoint:自定义 Oracle Membership
本文记录编写一个简单的基于oracle的membership for sharepoint示例.当项目客户的员工信息在其他的数据库,或者有员工信息遗留表的情况下可以考虑用自定义membership的方 ...
- 体感开发学习总结 - 二
Kinect开发学习笔记之(一)Kinect介绍和应用 http://blog.csdn.net/zouxy09/article/details/8145592 一.Kinect简介 Ki ...
- 【转】SharePoint开发中可能用到的各种Context(上下文)
第一部分 服务器端上下文 一.HttpContext 这个--我想就不用再介绍了,SharePoint运行在标准的ASP.NET框架下(2003用的不是标准的ASP.NET 1.1,不过这年头还有人用 ...
- Moss/Sharepoint 为特定用户组设置特定视图以及可见视图,自定义列表新建页,修改页和显示页(无代码法)...
首先介绍一个简单的方法: SharePoint不提供视图权限的直接控制方法. 不过可以采用另一种方式实现: 这里先假设有两种权限的用户组: 首先,在你希望设置权限的Custom List 或 Docu ...
- sharepoint 2016 学习系列篇(1)-关于sharepoint
最近微软已经推出了sharepoint server 2016,时间过得好快,不知不觉,从2008年开始,做sharepoint开发,到现在,也有8年左右的时间了,经过了sharepoint serv ...
- sharepoint 2016 学习系列篇(23)-文档库应用篇-(5)文档权限配置
学习了关于文档的上传,下载,以及属性标签的应用,朋友们估计也会想到,前面学习到了关于列表的数据权限配置, sharepoint 2016 学习系列篇(15)-自定义列表应用篇-(4)数据权限配置 那么 ...
- sharepoint 2016 学习系列篇(24)-文档库应用篇-(6)文档版本控制
学习到这里,相信朋友们,应该是对文档库有了大概的认识.回顾一下,前面学习了一个 sharepoint 2016 学习系列篇(17)-自定义列表应用篇-(6)开启列表数据版本控制 那么对于文档来说,文档 ...
- sharepoint 2016 学习系列篇(15)-自定义列表应用篇-(4)数据权限配置
当数据已经录入到列表中之后,接下来,朋友们可能会想知道,有些数据,只想给某些用户看到,或者编辑,列表是否支持这样的操作. 大微软的sharepoint平台,对于用户的需求,可以说是考虑得很周全的,权限 ...
最新文章
- 约翰霍普金斯大学Alan Yuille教授招收计算机视觉暑期科研实习生
- Scala模式匹配:for循环表达式中的模式匹配
- 函数式编程filter函数,list()表示列表显示值
- 个人Typech情侣主题Cupid模板
- JVM整体架构与调优参数说明
- 熊猫烧香病毒源码及分析
- Matlab计算机视觉/图像处理工具箱推荐
- ccboot最新服务器配置,使用CCBoot如何优化服务器和客户端网卡
- Android数据持久化存储(一)
- [VOT14](2022CVPR)CSWinTT: Transformer Tracking with Cyclic Shifting Window Attention
- SAP SM04踢人操作(摘录)
- QT5.7操作word
- react-hooks+Ant Design Mobile中的自定义表单验证
- 再见,我亲手创办的公司
- 硬货-如何用风控拯救下架的小红书
- 李梦娇口诀88条(视频+讲义)
- 一文读懂元宇宙--元宇宙技术及技术瓶颈
- arcgis地图怎么标注当前位置
- Codeforces Round #703 (Div. 2) A-E 题解
- 橱柜选购要简约实用 合理配置能够节省成本
热门文章
- KT1025A蓝牙芯片模块关于录音功能的一些常见问题_以及解答
- 中小企业上马ERP要谨慎
- 大白话说期权——除了买涨买跌,我们还能怎么交易?二元期权又是什么鬼?
- 小旋风asp服务器安装了还是打不开asp文件,小旋风AspWebServer - 本地架设ASP网站
- 58 同城移动端 Passport SDK 的设计与技术细节
- macOS 使用 X11 运行远端 linux 中的 x11 client 图形程序
- c语言短信猫开发代码
- 虚拟化中的链接克隆技术
- 弘辽科技:淘宝商品降权的影响是什么?为什么被降权?
- Win10早期版本下月终止服务、百万医疗设备存在漏洞风险|11月10日全球网络安全热点