文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SPSite和SPWeb的DisPose()方法研究

SPSite和SPWeb的DisPose()方法研究

时间:2011-06-04  来源:howTo

对SPSite和SPWeb对象使用Dispose()方法,主要有4个方面需要注意:

1.确保你Dispose的SPSite和SPWeb对象,是你自己代码创建出来的。

下面的几种情况是不需要释放的,如果释放这些对象,可能会引起异常。

  •  SPContext.Current.Web
  •    SPContext.Current.Site
  •    SPContext.Current.Site.RootWeb
  •    SPFeatureReceiverProperties.Feature.Parent for a Site- or Web-scoped feature receiver
  •    SPWebEventProperties.Web
  •    SPListEventProperties.Web
  •    SPListEventProperties.List.Web
  •    SPItemEventProperties.ListItem.Web
  •    UnsecuredLayoutsPage.Web (and LayoutsPageBase.Web)
  •    SPWebProvisioningProperties.Web
  •    SPControl.GetContextWeb()
  •    SPControl.GetContextSite()

总的来说,下面三种情况,必须释放SPSite或者SPWeb对象:

  • 新New出来的SPSite对象:

   SPSite site = new SPSite(url);

  • 显示的调用SPSite.OpenWeb()方法:
    SPWeb web = site.OpenWeb(url);
  • 使用SPSite.AllWebs ---这是个特别耗费资源的操作,尽量避免使用该对象:

  foreach(SPWeb web in site.AllWebs)

  {
    // …
    web.Dispose();
  }

2.一个SPSite或SPWeb对象,如果你不再使用它,应该尽快尽快释放掉。

也就是说,在最后一次访问它们的子对象之后,应该立即释放它们。需要注意的是,这里的SPWeb对象的SubSite,并不是SPWeb的子对象,SPWeb的子对象是指它的SPlist、SPFolder或SPListItem对象。

3.使用已经被释放的SPWeb或SPSite对象将会引起异常。(这种情况通常出现于,你Dispose掉一个不是你创建的SPWeb或SPSite对象)

合理的使用Dispose()方法是非常重要的,因为不合理的Dispose()是非常危险的。当你不能确认是否应该释放该对象时,我的观点是,宁可谨慎一点也不要乱用Dispose方法,让SharePoint来清理这些对象。对于SPWeb对象,当它的Parent Site被释放时,它也被释放。对于SPSite对象,当线程结束时会被清理。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载