SharePoint2010企业开发最佳实践(八)---- SPWeb 对象
SPWeb.ParentWeb 属性
释放清理是由 SharePoint Foundation 和 SharePoint Server 自动处理的。
良好的编码实践
using (SPSite site = new SPSite("http://www.msiw.net/"))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists["Announcements"];
SPWeb parentWeb = list.ParentWeb; //No explicit dispose required.
}
}
SPWeb.Webs 属性
SPWeb.Webs
SPWeb.Webs 属性将返回 SPWebCollection 对象。必须释放此集合中的 SPWeb 对象。
不良的编码实践
void WebsLeak()
{
using (SPSite siteCollection = new SPSite("http://www.msiw.net/"))
{
using (SPWeb outerWeb = siteCollection.OpenWeb())
{
foreach (SPWeb innerWeb in outerWeb.Webs)
{
// SPWeb innerWeb leak.
}
} // SPWeb object outerWeb.Dispose() automatically called.
} // SPSite object siteCollection.Dispose() automatically called.
}
良好的编码实践
void WebsNoLeak()
{
using (SPSite siteCollection = new SPSite("http://www.msiw.net/"))
{
using (SPWeb outerWeb = siteCollection.OpenWeb())
{
foreach (SPWeb innerWeb in outerWeb.Webs)
{
try // Should be first statement after foreach.
{
// ...
}
finally
{
if(innerWeb != null)
innerWeb.Dispose();
}
}
} // SPWeb object outerWeb.Dispose() automatically called.
} // SPSite object siteCollection.Dispose() automatically called.
}
SPWeb.Webs.Add
SPWeb.Webs.Add 方法(或 SPWebCollection.Add)会创建并返回新的 SPWeb 对象。应该释放从此方法调用中返回的任何 SPWeb 对象。
不良的编码实践
void WebsAddLeak(string strWebUrl)
{
using (SPSite siteCollection = new SPSite("http://www.msiw.net/"))
{
using (SPWeb web = siteCollection.OpenWeb())
{
SPWeb addedWeb = web.Webs.Add(strWebUrl); // Will leak.
} // SPWeb object web.Dispose() automatically called.
} // SPSite object siteCollection.Dispose() automatically called.
}
良好的编码实践
void WebsAddNoLeak(string strWebUrl)
{
using (SPSite siteCollection = new SPSite("http://www.msiw.net/"))
{
using (SPWeb web = siteCollection.OpenWeb())
{
using (SPWeb addedWeb = web.Webs.Add(strWebUrl))
{
//..
}
} // SPWeb object web.Dispose() automatically called.
} // SPSite object siteCollection.Dispose() automatically called.
}
SPWeb.Webs[] 索引运算符
SPWeb.Webs[] 索引运算符会针对每次访问返回一个新的 SPWeb 对象。将会通过调用 OpenWeb 方法来创建 SPWeb,即使已经访问了该对象也不例外。以下代码示例会导致在 .NET Framework 使用的内存中长期保留这些对象。
不良的编码实践 #1
使用 For 循环
int i;
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPWeb = oSPSite.OpenWeb();
for(i = 0;i < oSPWeb.Webs.Count;i++)
{
oSPWeb2 = oSPWeb.Webs[i];
BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
}
不良的编码实践 #2
使用 foreach 循环
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPWeb = oSPSite.OpenWeb();
foreach(SPWeb oSPWeb2 in oSPWebe.Webs)
{
BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
}
建议的修复方法是在每次循环结束后进行释放。
良好的编码实践 #1
使用 For 循环
int i;
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPWeb = oSPSite.OpenWeb();
for(i = 0;i < oSPWeb.Webs.Count;i++)
{
oSPWeb2 = oSPWeb.Webs[i];
BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
oSPWeb2.Dispose();
}
oSPWeb.Dispose();
良好的编码实践 #2
使用 foreach 循环
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPWeb = oSPSite.OpenWeb();
foreach(SPWeb oSPWeb2 in oSPWeb.Webs)
{
BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
oSPWeb2.Dispose();
}
oSPWeb.Dispose();
良好的编码实践 #3
将 for 循环与自动释放结合使用
int i;
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
using(oSPWeb = oSPSite.OpenWeb())
{
for(i = 0;i < oSPWeb.Webs.Count;i++)
{
Using(oSPWeb2 = oSPWeb.Webs[i])
{
BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
}
}
}
转载于:https://www.cnblogs.com/shangmeizhai/archive/2011/02/11/1951570.html
SharePoint2010企业开发最佳实践(八)---- SPWeb 对象相关推荐
- 新书《SharePoint2010开发最佳实践》出版了
以下是拙书<SharePoint2010开发最佳实践>的目录,语言尽量写的平实易懂,代码具有可操作性,但时间精力所限,粗陋之处难以避免,欢迎大家提供反馈. 目 录 第1章 SharePoi ...
- 微信公众平台开发最佳实践(第2版)
<微信公众平台开发最佳实践 第2版> 微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信 ...
- iOS应用开发最佳实践
<iOS应用开发最佳实践> 基本信息 作者: 王浩 出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16开 页 ...
- 《微信公众平台开发最佳实践》—— 1.3 微信公众平台的使用
本节书摘来异步社区<微信公众平台开发最佳实践>一书中的第1章,第1.3节,作者:方倍工作室,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.3 微信公众平台的使 ...
- web前端开发最佳实践_Web开发人员和设计师的最佳黑色星期五优惠
web前端开发最佳实践 As Black Friday 2016 is here, we thought that web developers and web designers should al ...
- QCon北京2015:移动开发最佳实践专题前瞻
从社交到游戏,从电商到O2O,移动互联网已经深入渗透到各行各业,而外卖和打车市场,更是正在经历着一些深刻的变化.巨额的融资和庞大的用户群当然是吸引眼球的,但是小团队背后的故事或许也能让你眼前一亮.不同 ...
- 详解_阿里云FPGA服务器f3实例RTL开发最佳实践脚本代码
背景:https://help.aliyun.com/product/155039.html?spm=5176.10695662.852251.3.543d78dclwQb08 1.FPGA云服务器 ...
- 微信公众平台开发最佳实践
<微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口 ...
- 《数据中台架构:企业数据化最佳实践》:感受数据中台建设五步法
写在前面:我是「云祁」,一枚热爱技术.会写诗的大数据开发猿.昵称来源于王安石诗中一句 [ 云之祁祁,或雨于渊 ] ,甚是喜欢. 写博客一方面是对自己学习的一点点总结及记录,另一方面则是希望能够帮助更多 ...
- Android开发最佳实践
原文链接:https://github.com/futurice/android-best-practices 转载来源:http://blog.csdn.net/asce1885/article/d ...
最新文章
- 落谷 P1060 开心的金明
- 分布式锁之三:Redlock实现分布式锁
- vs2017通过snippet代码片断进行标准化注释
- oracle tax 中国税,oracle_TAX_税基础设置操作手册.doc
- Python十段经典代码
- html文件下的flag,推荐一个SAM文件中flag含义解释工具
- 20165212 预备作业3 Linux安装及学习
- 陕西计算机软考试题及答案,2013陕西省上半年软考网络工程师下午试题及答案...
- 利用stringBuilder操作html文件
- js修改css样式的方法,js如何设置css样式?js修改css样式的方法
- 风尚云网学习-h5的input:type属性的image属性
- vue中headers是什么_vue在响应头response中获取自定义headers操作
- 一起学FPM之 初识SAP_FPM
- python 爬取淘宝视频_识别假货有绝招,先用python抓淘宝评论(附视频教程)
- Geometric GAN
- Hadoop学习----HDFS
- vue 给某个div设置回到顶部
- ASCII码与字符移动
- 考驾照 科目一 笔记
- 团队开发之:代码规范说明