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.cnblogs.com/levinlee/archive/2008/07/31/1257659.html
分享到:
相关推荐
2. **Microsoft.SharePoint**:这是最常用的命名空间,包含了一系列基本的对象模型,如网站(SPSite)、列表(SPList)、文件(SPFile)和用户(SPUser)等。这个命名空间是理解SharePoint对象模型的基础。 3. **...
3. **SPSite与SPWeb对象模型** `SPSiteSPWeb对象模型.docx`深入剖析了SharePoint的内部对象模型,尤其是SPSite和SPWeb对象。这两个核心对象代表了SharePoint的站点集和站点,是理解和操作SharePoint结构的基础。...
在本文中,我们将深入探讨SharePoint中的一些关键对象模型,包括SPSite、SPWeb、SPList、SPFolder和SPListItem,并了解如何使用它们进行基本的操作。 首先,SPSite是SharePoint中的顶级对象,代表一个SharePoint...
- 服务器端OM:`SPContext`, `SPSite`, `SPWeb`, `SPList`, `SPListItem`, `SPField` - 客户端OM:`ClientContext`, `Site`, `Web`, `List`, `ListItem`, `Field` ECMA Script客户端对象模型的主要优点是其轻量级和...
1. **使用SPSite和SPWeb对象(DLL方式)**: 这种方式依赖于`Microsoft.SharePoint`命名空间,允许直接操作SharePoint对象模型。首先,创建一个`SPSite`对象,指定SharePoint站点的URL,然后打开`SPWeb`对象,代表...
3. **对象模型**:学习如何创建和使用SPSite和SPWeb对象是关键。在创建SPSite后,必须妥善处理,因为它们是由不受管理的代码实现的,如果不正确地释放,可能会导致内存泄漏。使用完毕后,应调用`SPSite.Close()`和`...
MOSS对象模型是 SharePoint 开发的核心,它允许开发者直接与 SharePoint 的各种元素交互,包括列表、文档库、列表项等。我们首先通过实例代码展示如何获取和操作列表中的文档。 1. **获取列表对象**: - `SPSite` ...
这主要涉及使用SharePoint客户端对象模型(CSOM)或服务器端对象模型(SSOM)来检索登录用户的数据。下面我们将详细讲解如何实现这一功能。 1. **服务器端对象模型(SSOM)** 在SharePoint 2013的服务器端代码中,...
创建新的列表可以通过调用SPWeb对象的Lists.Add方法,传入列表名称、描述和一个SPListTemplateType枚举值来指定列表模板。确保调用Update()方法以保存更改。例如创建一个公告列表: ```csharp string listName = ...
10. **编程模型**:掌握 SharePoint对象模型,包括SPLanguage、SPSite、SPWeb和SPList等类,以及如何使用客户端对象模型(CSOM)进行远程开发。 11. **权限与安全**:理解SharePoint的安全模型,包括角色定义、权限...
它提供了大量的类和接口,如SPSite、SPWeb、SPList、SPListItem等,用于操作SharePoint对象模型,使得开发者可以方便地进行定制开发。 2. **对象模型**:SharePoint的对象模型是一个层次结构,由多个层次的类和接口...
GetCurrentUser方法是SharePoint对象模型的一部分,它主要用于获取当前登录用户的对象。这个方法通常在你需要根据用户的身份来执行特定操作时非常有用,比如显示个性化内容、记录日志或实施权限控制。在服务器端代码...
9. **API与对象模型**:深入理解SharePoint的对象模型,包括SPSite、SPWeb、SPList等核心对象,以及如何使用它们进行编程。 10. **调试与性能优化**:分享如何调试SharePoint应用程序,以及性能监控和优化的最佳...
它包含了用于操作SharePoint数据和功能的所有类和接口,如SPSite、SPWeb、SPList等。 #### 客户端对象模型(Client Object Model, COM) COM允许开发人员在不使用服务器端代码的情况下访问SharePoint数据和功能,...
这个模型由一系列相互关联的对象组成,这些对象代表了SharePoint环境中的各种元素,如Web站点、列表、列表项、字段、视图等。 1. **基础概念:** - **SPSite**:这是SharePoint Object Model的顶级对象,代表一个...
- 实现这些方法的业务逻辑,通常会涉及到与SharePoint对象模型交互,如SPSite、SPWeb、SPList等。 2. 部署Web服务: - 将生成的Web服务项目部署到SharePoint的ISAPI目录下,通常是在/_layouts/目录下。 - 配置...
- **客户端 API**:包括 JavaScript 对象模型 (JSOM)、客户对象模型 (CSOM) 和 REST API,适用于轻量级客户端应用开发。 - **API 选择**:根据应用场景选择合适的 API 类型。例如,对于 Web 应用,可以优先考虑使用 ...
- SDK与API:介绍SharePoint的SDK和对象模型,如SPSite、SPWeb、SPList、SPListItem等,以及如何使用它们进行编程。 3. **站点与列表** - 创建与定制站点:学习如何创建不同类型的SharePoint站点,如团队站点、...