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

本文介绍了SharePoint中关于非托管对象资源释放的重要性、0KB文件上传处理方式、版本控制及文档地址获取方法,以及常见的内存泄漏问题解决方案。

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

14.        SharePoint 中的非托管对象需要我们手动释放资源

SPGlobalAdmin SPSite SPWeb SPFileStream 等等一些对象需要进行手动释放资源。由于 SharePoint 中有这些非托管对象,所以我们编程的时候应该特别注意,如果有些资源没有释放,会造成内存溢出。并且很多时候我们自定义的程序是由 IIS 调用的,如果没有释放资源,可能会是 IIS 崩溃,造成不必要的麻烦。

15.        SharePoint 中不能上传大小为 0 KB 的文件,由于 SharePoint 上传文档的时候会将这个文件的内容一并写进数据库的 Content 字段,如果文件的大小是 0 ,则这个 byte [] 将没有内容,所以不会成功。如果我们要对 0KB 的文件进行上传的话,我们需要使用程序进行特殊处理:

一是可以在这个文件中添加我们的标识信息,当取得其中的内容的时候我们也可以将标识信息去掉,然后就是内容信息。或者使用 API 也是可以处理添加 0 KB 文件的。或者使用 Explorer View 进行上传也可以上传大小为 0 KB 的文件。

16.        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

17.        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对象进行释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值