首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SharePoint SPSite处理

SharePoint SPSite处理
EN

Stack Overflow用户
提问于 2009-06-17 16:13:54
回答 3查看 2.5K关注 0票数 4

我的场景是,在我想要遍历web应用程序中的每个SPSite的SPJobDefinition的Execute方法中。所以我有以下代码:

代码语言:javascript
复制
foreach (SPSite site in this.WebApplication.Sites)
{
  ...
}

问题是,我需要处理每个站点吗?我通常遵循的规则是,只有在我自己更新的情况下,才能处理或放入一个使用中。Will该Sites属性实际上包含完全构造的site对象,我在这段代码中只会引用这些对象。如果是这样,那么处理这些站点将是危险的,因为我正在修改另一个可能需要它们的对象。或者相反的是,Sites属性是否应请求构造对象。在哪种情况下,我有责任处理掉它们?

另外,如果我确实需要这样做,我该如何处理它们。在这种情况下我不能使用using,而且在foreach中调用dispose会破坏枚举吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-17 16:34:42

是的你需要。请参阅Best Practices: Common Coding Issues When Using the SharePoint Object Model中的“编写可扩展到大量用户的应用程序”。正确的模式是:

代码语言:javascript
复制
foreach (SPSite site in this.WebApplication.Sites)
{
  try
  {
    ...
  }
  finally
  {
    site.Dispose();
  }
}

调用dispose不会中断枚举。它只是清理对象使用的非托管内存。

票数 15
EN

Stack Overflow用户

发布于 2009-06-18 10:28:35

此处的指导http://www.sharepointdevwiki.com/display/public/When+to+Dispose+SharePoint+objects

这表明

代码语言:javascript
复制
//loop through each sub site
for (int i = 0; i <= rootweb.Webs.Count; i++)
{
  using (SPWeb subweb = rootweb.Webs[i])
  {
    //do stuff
  }
}

是这个问题的首选解决方案。

还有一个工具,你可以在你的解决方案上运行,以检查你做的事情是否正确。http://code.msdn.microsoft.com/SPDisposeCheck

票数 0
EN

Stack Overflow用户

发布于 2009-06-25 23:20:24

看这里- Best Practices: Using Disposable Windows SharePoint Services Objects

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1008099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档