【转】SPSite、SPWeb对象模型(转winos.cn)

SPSite对象

通常在调用SPSite对象构造函数后,你需要在使用完后调用Dispose方法来清空对象。但是,如果你使用SPControl.GetContextSite来获取对象那么你不能使用Dispose来清空对象。因为通过这种方式获得的SPSite或者SPWeb对象会保留一份内部列表信息,当使用Dispose对象后,可能会产生无法预测的错误。实际上,WSS会在页面结束后清空这些对象。

下面,我们分析一下有关SPSite类的方法和属性会产生对象以及如何清空这些对象

SPSiteCollection类
1.SPSiteCollection.Add方法:通过这个方法会创建并返回一个SPSite对象,在不需要使用该对象后,你应该清除内存中的对象。

例:
SPGlobalAdmin oSPGlobalAdmin    = new SPGlobalAdmin();
SPSiteCollection aSites  = oSPGlobalAdmin.VirtualServers[0].Sites;

SPSite oSPSite = aSites.Add( ... );
... Process the site info ... 
oSPSite.Dispose();
oSPGlobalAdmin.Dispose();

通过SPSiteCollection [ ] 索引来获得SPSite,在下面的例子是没有及时清除没有的对象的范例。

int j;
SPSite oSPSite;
SPGlobalAdmin oSPGlobalAdmin    = new SPGlobalAdmin();
SPSiteCollection aSites  = oSPGlobalAdmin.VirtualServers[0].Sites;

for (j = 0;j < aSites.Count;j++)
{
   oSPSite = aSites[j];
   BuildTableRow(oDisplayTable, "Site", oSPSite.Url);
}
oSPGlobalAdmin.Dispose();

这里,我们建议在循环中加入Dispose方法以清空产生的SPSite对象,例:

int j;
SPSite oSPSite;
SPGlobalAdmin oSPGlobalAdmin    = new SPGlobalAdmin();
SPSiteCollection aSites  = oSPGlobalAdmin.VirtualServers[0].Sites;

for(j = 0;j < aSites.Count;j++)
{
   oSPSite = aSites[j];
   BuildTableRow(oDisplayTable, "Site", oSPSite.Url);
   oSPSite.Dispose();
}

oSPGlobalAdmin.Dispose();

2.SPSite.AllWebs属性

SPSites.AllWebs.Add方法:创建并返回SPWeb对象,在不需要使用该对象后,你应该清除内存中的对象,例:
SPWeb oSPWeb;
SPSite oSPSite = SPControl.GetContextSite(Context);

oSPWeb = oSPSite.AllWebs.Add( ... );
... Process the SPWeb info ... 
oSPWeb.Dispose();

3.SPSite.AllWebs [ ] 索引操作在每次访问对象后会返回SPWeb实例,下面的例子会产生大量SPWeb对象。

int j;
SPWeb oSPWeb;
SPSite oSPSite = SPControl.GetContextSite(Context);

for(i=0;j < oSPSite.AllWebs.Count; j++)
{
   oSPWeb = oSPSite.AllWebs[j];
   BuildTableRow(oDisplayTable, "Web", oSPWeb.Title);
}

建议在循环中调用Dispose方法清除对象,例:

int j;
SPWeb oSPWeb;
SPSite oSPSite = SPControl.GetContextSite(Context);
for(j = 0;j < oSPSite.AllWebs.Count; j++)
{
   oSPWeb = oSPSite.AllWebs[j];
   BuildTableRow(oDisplayTable, "Web", oSPWeb.Title);
   oSPWeb.Dispose();
}

或者:

int j;
SPWeb oSPWeb;
SPSite oSPSite = SPControl.GetContextSite(Context);
for(j = 0;j < oSPSite.AllWebs.Count; j++)
{
   using(oSPWeb = oSPSite.AllWebs[j])
   {
      BuildTableRow(oDisplayTable, "Web", oSPWeb.Title);
   }
}

4.SPSite.OpenWeb 和 SPSite. SelfServiceCreateSite 方法:这两个方法都会返回SPWeb对象,你应该按照下面例子方式处理SPWeb对象。

SPSite oSPSite = new SPSite("http://Server");
SPWeb oSPWeb = oSPSite.OpenWeb(..);
... additional processing ... 
oSPWeb.Dispose();
oSPSite.Dispose();

5.SPSite.LockIssue, SPSite.Owner, and SPSite.SecondaryContact 属性

由于这3个属性会产生SPSite.RootWeb引用,所以,清空对象方法应该如下:

String str;
SPSite oSPSite = new SPSite("http://server");
str = oSPSite.LockIssue; 
oSPSite.RootWeb.Dispose();
oSPSite.Dispose();

6.SPSite.RootWeb 属性:

在之前提到过RootWeb属性,在利用RootWeb的属性后需要使用清空相关对象,例:

String str;
SPSite oSPSite = new SPSite("http://server");
str = oSPSite.RootWeb.Title;
... additional processing ... 
oSPSite.RootWeb.Dispose();
oSPSite.Dispose();

SPWeb 对象

1.SPWeb.ParentWeb属性:第一次调用SPWeb.ParentWeb的时候,它会判断赋值的成员变量是否是NULL值,如果成员变量为NULL并且上级站点,那么它自动调用OPERWEB方法产生一个SPWeb对象,下次在访问时候只是返回保存在变量中的值。

例:
String str;
SPSite oSPSite = new SPSite("http://server");
SPWeb oSPWeb, oSPWebParent;
oSPWeb       = oSPSite.OpenWeb();
oSPWebParent = oSPWeb.ParentWeb;

if (oSPWebParent != null)
{
   ... additional processing ... 
}

if (oSPWebParent != null)   oSPWebParent.Dispose();

oSPWeb.Dispose();
oSPSite.Dispose();

2.SPWeb.Webs 属性

SPWeb.Webs.Add 方法:创建并返回SPWeb对象,在不需要使用该对象后,你应该清除内存中的对象,例:
SPWeb oSPWeb
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPSWeb = oSPSite.AllWebs.Add( ... );
... Process the SPWeb info ... 
oSPWeb.Dispose();

3.SPWeb.Webs[ ] 索引操作和SPSite.Webs相同,在每次访问对象后会返回SPWeb实例,下面的例子会产生大量SPWeb对象。

int j;
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPWeb = oSPSite.OpenWeb();

for(j = 0;j < oSPWeb.Webs.Count;j++)
{
   oSPWeb2 = oSPWeb.Webs[j];
   BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
}

建议在循环中清除对象。

int j;
SPWeb oSPWeb, oSPWeb2;
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPWeb = oSPSite.OpenWeb();

for(j = 0;j < oSPWeb.Webs.Count;j++)
{
   oSPWeb2 = oSPWeb.Webs[j];
   BuildTableRow(oDisplayTable, "Web", oSPWeb2.Title);
   oSPWeb2.Dispose();
}
oSPWeb.Dispose();

其他需要清除的对象

1.Microsoft.SharePoint.Portal.SiteData.Area.Web 属性在每次访问后返回一个新的SPWeb对象。在使用后应该及时清除对象。
例:

String str;
Area oArea = AreaManager.GetArea(PortalContext.Current, new Guid(AreaGiud);
SPWeb oSPWeb = oArea.Web;
str = oSPweb.Title;
str = oSPWeb.Url;
... 
oSPWeb.Dispose();

或者:

String str;
Area oArea = AreaManager.GetArea(PortalContext.Current, new 
   Guid(AreaGiud);
using(SPWeb oSPWeb = oArea.Web)
{
   str = oSPweb.Title;
   str = oSPWeb.Url;
}

2.SPControl.GetContextSite和 SPControl.GetContextWeb 方法:在前面有提到,这里方法返回对象不能通过Dispose来清除,可能会产生不可预期的错误。以下做法是错误的:

SPSite oSPSite = SPControl.GetContextSite(..);
... additional processing ... 
oSPSite.Dispose();

正确的方法应该是:

SPSite oSPSite = SPControl.GetContextSite(..);
SPWeb oSPWeb = oSPSite.OpenWeb(..);
... additional processing ... 
oSPWeb.Dispose();

或者:

SPSite oSPSite = SPControl.GetContextSite(..);
using(SPWeb oSPWeb = oSPsite.OpenWeb())
{
   ... additional processing ... 
}

3.WebPartPage.RootWeb 属性:和SPSite.RootWeb 属性相同。只有当WebPartPage.IsRootWeb为True时才需要清除对象,例如:

String str;
WebPartPage oWebPartPage = new WebPartPage();
str = oWebPartPage.RootWeb.Title;
... additional processing ... 
if(oWebPartPage.Web.IsRootWeb
   oWebPartPage.Dispose();

大部分Sharepoint对象都实现IDisposable接口,当你不使用对象时应该清除该对象,避免在内存中保存过多对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCNA-第八篇-OSPF-上

CCNA-第八篇-OSPF OSPF,最常用的路由协议,他来了他来了 OSPF呢怎么说呢 是一个比较重要而且比较基础的点,出到去外面要是说不会OSPF,那还算啥网络工程师 但是呢,他也不是那么的完全重要.因为很多小地方压根就用不到.但是列你不能不会呀 到了OSPF呢,配置就会逐渐的多那么一点点…

【转】OneDrive开发入门

OneDrive API提供了对存储在OneDrive上文件的访问能力&#xff0c;大多数API都遵循REST模式&#xff0c;少部分的API可以通过简单的函数来调用 在使用OneDrive API之前要先了解两个简单的概念 REST&#xff08; Representational State Transfer&#xff09;&#xff1a;表征…

CCNA-第九篇-OSPF下+VLAN开篇初介绍

CCNA-第九篇-OSPF下VLAN开篇初介绍 补充一下官网的PPT对于DR/BDR的描述 邻居-drothers 和drothers之间的关系–2WAY 彼此之间只会交换hello包来让邻居正常通信,不交换LSA 邻接-dr/bdr/drothers的关系,-FULL 交换hello包与LSA信息 224.0.0.5-公用 224.0.0.6-仅有DR/BDR监听 其…

UWP开发入门教程备忘

UWP-01~03 略~ UWP-04 - 什么是XAML? XAML - 遵循XML语法&#xff0c;XAML实际上是在创建类的实例&#xff0c;并给它们设定属性值&#xff0c;用于定义UI UWP-05 - 类型转换器 类型转换器 - 在XAML中我们可以用一个字符串表示属性值&#xff0c;类型转换器会将字符串转换…

CCNA-第十篇-VLAN-下

CCNA-第十篇-VLAN-下 讲真,这个技术点没啥好讲的,很好理解.也很基础 通俗的说就是一个框框. . 其实理论上来说呢,CCNA是应该先教交换的再到路由的,哈哈,不过倒过来了,倒就倒吧.这里开始讲交换技术 LAN-内网 WAN-外网 VLAN虚拟局域网(一般用于内网) 交换机可以转发广播数据…

Office Web Apps安装部署(一)

系统要求为Windows Server 2012&#xff0c; 注意&#xff1a;安装Office Web Apps的服务器除了Office Web Apps之外&#xff0c;不能安装其他应用。包括不能安装Office&#xff0c;lync&#xff0c;,sharepoint等应用&#xff0c;即要单独部署。 安装IIS 7.0 打开服务器管理…

CCNA-第十一篇-VTP+STP(上)

CCNA-第十一篇-VTPSTP(上) VTP:VLAN中继协议&#xff08;VLAN Trunking protocol &#xff09;利用第2层中继帧&#xff0c;在一组交换机之间进行VLAN通信 STP:生成树,交换机的冗余协议 MSTP:多实例生成树,STP的进化版本. 然后先说说上次接口 思科有2种,华为有3种 access,t…

Office Web Apps安装部署(二)

SharePoint 2013调用Office Web Apps 注意&#xff1a;调用OfficeWebApps的sharepoint应用的身份认证必须是基于声明的身份认证&#xff08;claims-based authentication&#xff09; 首先安装好SharePoint2013&#xff0c;我在此部署文档中使用的是免费的sharepiont foundat…

CCNA-第十二篇-STP+ACL(下)

CCNA-第十二篇-STPACL(下) 首先说说要跳跳了 立个小FLAG, 两个月内急速完成CCIE理论LAB实操 因为接了个工作,主要我能做到就能做这份工作. 其实NP中间的点很多都会,只是因为笔记弄不急了, 就放到CSDN上重新复习学习一次. 下几篇开始就要起飞到CCIE了 后面还有个NAT还有一点SDN…

软件过程开发方法(RUP、AP、MP、HP) CMMI/SPCA业务介绍

CMMI/SPCA业务介绍 (1)背景介绍&#xff1a; CMM是“软件能力成熟度模型”的英文简写&#xff0c;该模型由美国卡内基-梅隆大学的软件工程研究所&#xff08;简称SEI&#xff09;受美国国防部委托&#xff0c;于1991年研究制定&#xff0c;初始的主要目的是为了评价美国国防部的…

CCNA-第十三篇-NAT-上

CCNA-第十三篇-NAT-上 NAT- netword address translation 网络地址转换 NAT不仅仅是用于共享地址上网,NAT是一个很大的东西 核心思想是转换地址,以及端口号 NAT也分静态和动态 TAG:NAT很多时候也叫做端口映射,只是一个叫法而已 不只是设备,电脑本身也有端口号的哦! 电脑查…

entity framework6 edmx文件详解

entity framework中的edmx文件作为代码与数据库沟通的桥梁&#xff0c;作用是至关重要的。如果edmx文件出了问题&#xff0c;ef就基本上没得用了。虽然edmx文件是由ef自动生成的&#xff0c;但是一些特定的操作可能会引发ef的bug&#xff0c;从而导致edmx文件出错&#xff0c;并…

CCNA-第十四篇-NAT-下+链路聚合(LACP)+DHCP

CCNA-第十四篇-NAT-下 这一篇是是针对一下华为设备的nat,然后讲讲链路聚合 下一篇来一个DHCP一点点的SDN的介绍 **然后讲完SDN就基本上CCNA结束了哦**华为的链路聚合叫Eth-trunk 思科的链路聚合叫Ether-Channel 华为静态NAT 环境如下 首先把他的telnet开起来,server也是…

[Sharepoint2007对象模型]第一回:服务器场(SPFarm)

Sharepoint是微软一个很重要的服务器产品&#xff0c;它可以方便的创建和维护一个网站&#xff0c;在Sharepoint的管理中心提供了很强大的管理工具。同时为了更加灵活的后期定制和开发&#xff0c;Sharepoint提供了完整的对象模型&#xff0c;对象模型也就相当于Sharepoint的二…

CCNA-第十五篇-DHCP配置+SDN介绍(最后一章)

CCNA-第十五篇-DHCP配置SDN介绍 各位好,如果有一直看下来的谢谢支持 这里是CCNA的最后一篇了,如果真的能吸收很多内容,那么普通的东西基本上都没什么大问题了.除非就是工作经验 下一篇就到一个CCNA的综合实验了 DHCP 思科 创造一个dhcp地址池名字为dhcp 宣告网段为192.168…

[Sharepoint2007对象模型]第二回:Web应用程序服务(SPWebService)

在上一回中说了Sharepoint中的服务器场&#xff0c;在服务器场中最重要的一个服务就是Web应用程序服务。我们自己的Sharepoint网站都是借助于这个服务才能正常运行的&#xff0c;也就是说所有的Sharepoint站点都是搭建在这个服务之上的。Web应用程序服务对应的对象模型为&#…

CCNA-第十六篇-综合实验

CCNA-第十六篇-综合实验 环境以及拓扑图如下 TAG:个人说明,做到最后我才发现hostname打错了,IDC-1打成ISP-1了,不过也没关系,知道就行了,全部的IDC都打成ISP了还有一个的话 ,如果经常弹这个东西可以自己解决 这个是半双工和全双工的意思,毕竟这里是模拟器.也正常, 在接口下打…

[Sharepoint2007对象模型]第三回:Web应用程序(SPWebApplication)

在Sharepoint的管理中心创建一个网站的顺序大致如下&#xff1a;创建Web应用程序-〉创建网站集。所以Web应用程序是网站的一个基础&#xff0c;在一个Web应用程序下可以创建多个网站&#xff0c;本回就主要来介绍Web应用程序这个对象模型以及如何使用对象模型来创建一个Web应用…

CCNP-第一篇-思科SLA+华为BFD+ODR+浮动路由

CCNP-第一篇-CCNP-第一篇-思科SLA华为BFDODR浮动路由 从这就开始NP了,老规矩,先路由后交换,开搞 到了NP之后的配置会多很多很多哦!一篇很长过万字都不出奇. 思科静态路由浮动路由SLA检测 什么叫浮动路由呢?在双线的情况下做备份. 我们知道,路由都是有cost有优先级这个东西的…

SharePoint 2013开发入门探索(二)- 列表操作

我们如何用代码对SharePoint列表做些例如增删改查的操作呢&#xff1f;如果您的程序可以部署到服务器上&#xff0c;就可以使用 服务器对象模型&#xff0c;因为服务器对象模型提供的功能最多&#xff0c;限制最少&#xff1b;否则可能要选择客户对象模型等其他方式&#xff0c…