关于 sharepoint 你不知道的那些事-dispose

最近开发代码的过程中,发现书上有一段关键的内容在开发过程中很容易忽略,具体如下:

以下代码输出一个站点集根站点的所有列表名称

SPSite site = new SPSite("http://siteUrl"); //实例化网站集对象
SPWeb web = site.RootWeb; //获取到根网站
foreach(SPList list in web.Lists) //遍历所有列表
{
    Page.Response.Write(list.Title); //输出列表标题
}
web.Dispose(); //释放网站对象
site.Dispose(); //释放网站集对象
  

此处对siteweb变量都做了dispose,即释放变量的操作。
这里需要说明的是,代码中实例化的网站集对象和站点对象都是需要用Dispose来释放的,否则会造成服务器内存泄露

除了调用Dispose方法释放对象外,一种更好的方式是采用using语句。

using(SPSite site = new SPSite("http://siteUrl"))
{
    using(SPWeb web = site.RootWeb){
        foreach(SPList list in web.Lists){ //遍历所有列表
            Page.Response.Write(list.Title); //输出列表标题
        }
    }
}
  

如果代码运行在MOSS环境下,可以直接调用上下文对象,不需要实例化新的SPSiteSPWeb对象,上下文对象是不需要手工释放的,从上下文获取对象的代码如下。

SPSite site = SPContext.Current.Site; //获取当前站点集
SPWeb web = SPContext.Current.Web; //获取当前站点