日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】SPSite、SPWeb对象模型(转winos.cn) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SPSite對(duì)象

通常在調(diào)用SPSite對(duì)象構(gòu)造函數(shù)后,你需要在使用完后調(diào)用Dispose方法來(lái)清空對(duì)象。但是,如果你使用SPControl.GetContextSite來(lái)獲取對(duì)象那么你不能使用Dispose來(lái)清空對(duì)象。因?yàn)橥ㄟ^(guò)這種方式獲得的SPSite或者SPWeb對(duì)象會(huì)保留一份內(nèi)部列表信息,當(dāng)使用Dispose對(duì)象后,可能會(huì)產(chǎn)生無(wú)法預(yù)測(cè)的錯(cuò)誤。實(shí)際上,WSS會(huì)在頁(yè)面結(jié)束后清空這些對(duì)象。

下面,我們分析一下有關(guān)SPSite類的方法和屬性會(huì)產(chǎn)生對(duì)象以及如何清空這些對(duì)象

SPSiteCollection類
1.SPSiteCollection.Add方法:通過(guò)這個(gè)方法會(huì)創(chuàng)建并返回一個(gè)SPSite對(duì)象,在不需要使用該對(duì)象后,你應(yīng)該清除內(nèi)存中的對(duì)象。

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

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

通過(guò)SPSiteCollection [ ] 索引來(lái)獲得SPSite,在下面的例子是沒(méi)有及時(shí)清除沒(méi)有的對(duì)象的范例。

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();

這里,我們建議在循環(huán)中加入Dispose方法以清空產(chǎn)生的SPSite對(duì)象,例:

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方法:創(chuàng)建并返回SPWeb對(duì)象,在不需要使用該對(duì)象后,你應(yīng)該清除內(nèi)存中的對(duì)象,例:
SPWeb oSPWeb;
SPSite oSPSite = SPControl.GetContextSite(Context);

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

3.SPSite.AllWebs [ ] 索引操作在每次訪問(wèn)對(duì)象后會(huì)返回SPWeb實(shí)例,下面的例子會(huì)產(chǎn)生大量SPWeb對(duì)象。

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);
}

建議在循環(huán)中調(diào)用Dispose方法清除對(duì)象,例:

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 方法:這兩個(gè)方法都會(huì)返回SPWeb對(duì)象,你應(yīng)該按照下面例子方式處理SPWeb對(duì)象。

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個(gè)屬性會(huì)產(chǎn)生SPSite.RootWeb引用,所以,清空對(duì)象方法應(yīng)該如下:

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

6.SPSite.RootWeb 屬性:

在之前提到過(guò)RootWeb屬性,在利用RootWeb的屬性后需要使用清空相關(guān)對(duì)象,例:

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

SPWeb 對(duì)象

1.SPWeb.ParentWeb屬性:第一次調(diào)用SPWeb.ParentWeb的時(shí)候,它會(huì)判斷賦值的成員變量是否是NULL值,如果成員變量為NULL并且上級(jí)站點(diǎn),那么它自動(dòng)調(diào)用OPERWEB方法產(chǎn)生一個(gè)SPWeb對(duì)象,下次在訪問(wèn)時(shí)候只是返回保存在變量中的值。

例:
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 方法:創(chuàng)建并返回SPWeb對(duì)象,在不需要使用該對(duì)象后,你應(yīng)該清除內(nèi)存中的對(duì)象,例:
SPWeb oSPWeb
SPSite oSPSite = SPControl.GetContextSite(Context);
oSPSWeb = oSPSite.AllWebs.Add( ... );
... Process the SPWeb info ...?
oSPWeb.Dispose();

3.SPWeb.Webs[ ] 索引操作和SPSite.Webs相同,在每次訪問(wèn)對(duì)象后會(huì)返回SPWeb實(shí)例,下面的例子會(huì)產(chǎn)生大量SPWeb對(duì)象。

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);
}

建議在循環(huán)中清除對(duì)象。

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();

其他需要清除的對(duì)象

1.Microsoft.SharePoint.Portal.SiteData.Area.Web 屬性在每次訪問(wèn)后返回一個(gè)新的SPWeb對(duì)象。在使用后應(yīng)該及時(shí)清除對(duì)象。
例:

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 方法:在前面有提到,這里方法返回對(duì)象不能通過(guò)Dispose來(lái)清除,可能會(huì)產(chǎn)生不可預(yù)期的錯(cuò)誤。以下做法是錯(cuò)誤的:

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

正確的方法應(yīng)該是:

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 屬性相同。只有當(dāng)WebPartPage.IsRootWeb為True時(shí)才需要清除對(duì)象,例如:

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

大部分Sharepoint對(duì)象都實(shí)現(xiàn)IDisposable接口,當(dāng)你不使用對(duì)象時(shí)應(yīng)該清除該對(duì)象,避免在內(nèi)存中保存過(guò)多對(duì)象。

總結(jié)

以上是生活随笔為你收集整理的【转】SPSite、SPWeb对象模型(转winos.cn)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。