SharePoint SPSite处置

Dan*_*ell 4 c# sharepoint dispose spsite

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

foreach (SPSite site in this.WebApplication.Sites)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

问题是,我是否需要处理每个站点?我通常会遵循的规则只有在我自己新建的情况下才会处理或放入使用中.该Sites属性是否实际上包含完全构造的站点对象,我将在此代码中仅引用该对象.如果是这样,那么处理网站将是危险的,因为我正在修改另一个可能需要它们的对象.或者相反的是Sites属性是否根据请求构造对象..在这种情况下,我处理它们的可行性是什么?

如果我确实需要这样做,我该如何处理它们.在这种情况下我不能使用using,并且会在foreach中调用一个dispose来打破枚举?

Ale*_*gas 15

是的你是.请参阅最佳实践中的 "编写可扩展到大量用户的应用程序" :使用SharePoint对象模型时的常见编码问题.正确的模式是:

foreach (SPSite site in this.WebApplication.Sites)
{
  try
  {
    ...
  }
  finally
  {
    site.Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)

调用dispose不会破坏枚举.它只是清理对象使用的非托管内存.