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 对象相关推荐

  1. 新书《SharePoint2010开发最佳实践》出版了

    以下是拙书<SharePoint2010开发最佳实践>的目录,语言尽量写的平实易懂,代码具有可操作性,但时间精力所限,粗陋之处难以避免,欢迎大家提供反馈. 目 录 第1章 SharePoi ...

  2. 微信公众平台开发最佳实践(第2版)

    <微信公众平台开发最佳实践 第2版> 微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信 ...

  3. iOS应用开发最佳实践

    <iOS应用开发最佳实践> 基本信息 作者: 王浩 出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16开 页 ...

  4. 《微信公众平台开发最佳实践》—— 1.3 微信公众平台的使用

    本节书摘来异步社区<微信公众平台开发最佳实践>一书中的第1章,第1.3节,作者:方倍工作室,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.3 微信公众平台的使 ...

  5. web前端开发最佳实践_Web开发人员和设计师的最佳黑色星期五优惠

    web前端开发最佳实践 As Black Friday 2016 is here, we thought that web developers and web designers should al ...

  6. QCon北京2015:移动开发最佳实践专题前瞻

    从社交到游戏,从电商到O2O,移动互联网已经深入渗透到各行各业,而外卖和打车市场,更是正在经历着一些深刻的变化.巨额的融资和庞大的用户群当然是吸引眼球的,但是小团队背后的故事或许也能让你眼前一亮.不同 ...

  7. 详解_阿里云FPGA服务器f3实例RTL开发最佳实践脚本代码

    背景:https://help.aliyun.com/product/155039.html?spm=5176.10695662.852251.3.543d78dclwQb08 1.FPGA云服务器 ...

  8. 微信公众平台开发最佳实践

    <微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口 ...

  9. 《数据中台架构:企业数据化最佳实践》:感受数据中台建设五步法

    写在前面:我是「云祁」,一枚热爱技术.会写诗的大数据开发猿.昵称来源于王安石诗中一句 [ 云之祁祁,或雨于渊 ] ,甚是喜欢. 写博客一方面是对自己学习的一点点总结及记录,另一方面则是希望能够帮助更多 ...

  10. Android开发最佳实践

    原文链接:https://github.com/futurice/android-best-practices 转载来源:http://blog.csdn.net/asce1885/article/d ...

最新文章

  1. 落谷 P1060 开心的金明
  2. 分布式锁之三:Redlock实现分布式锁
  3. vs2017通过snippet代码片断进行标准化注释
  4. oracle tax 中国税,oracle_TAX_税基础设置操作手册.doc
  5. Python十段经典代码
  6. html文件下的flag,推荐一个SAM文件中flag含义解释工具
  7. 20165212 预备作业3 Linux安装及学习
  8. 陕西计算机软考试题及答案,2013陕西省上半年软考网络工程师下午试题及答案...
  9. 利用stringBuilder操作html文件
  10. js修改css样式的方法,js如何设置css样式?js修改css样式的方法
  11. 风尚云网学习-h5的input:type属性的image属性
  12. vue中headers是什么_vue在响应头response中获取自定义headers操作
  13. 一起学FPM之 初识SAP_FPM
  14. python 爬取淘宝视频_识别假货有绝招,先用python抓淘宝评论(附视频教程)
  15. Geometric GAN
  16. Hadoop学习----HDFS
  17. vue 给某个div设置回到顶部
  18. ASCII码与字符移动
  19. 考驾照 科目一 笔记
  20. 团队开发之:代码规范说明

热门文章

  1. (转载)make的-j命令(加速Linux程序编译)
  2. 网络通信之通过get/post方式提交参数给web应用
  3. asp优化:认识和优化connection对象
  4. windows查看端口占用指令
  5. HDU-2686 Matrix 多进程DP
  6. DataTables之TableTools插件
  7. gnome 3.4 评测
  8. [POJ3274 Gold Balanced Lineup]
  9. [汇编] 十进制与十六进制互转
  10. Android软件测试的日志文件问题