문제

내가 가진 시나리오는 웹 애플리케이션의 모든 spsite를 거치고 싶은 spjobdefinition의 실행 방법에 있습니다. 그래서 다음 코드가 있습니다.

foreach (SPSite site in this.WebApplication.Sites)
{
  ...
}

질문은 각 사이트를 처리해야합니까? 내가 일반적으로 지나가는 규칙은 내가 새로운 경우에만 사용하거나 사용하는 것입니다. 이 사이트 속성에는 실제로 완전히 구성된 사이트 객체가 포함되어 있어이 코드에서만 참조 할 수 있습니다. 그렇다면 사이트를 처분하는 것은 원하는 다른 객체를 수정하기 때문에 위험합니다. 또는 그 반대는 사이트 속성이 요청시 객체를 구성하는 것입니다. 어떤 경우에는 그것들을 처분하는 것이 나의 책임이 있습니까?

또한 그렇게해야한다면 어떻게 처리합니까? 이 경우 사용을 사용할 수 없으며, 열거를 파괴하는 내부의 처분을 호출 할 것인가?

도움이 되었습니까?

해결책

네, 그렇습니다. "많은 수의 사용자에게 확장하는 응용 프로그램 작성"을 참조하십시오. 모범 사례 : SharePoint 객체 모델을 사용할 때 일반적인 코딩 문제. 올바른 패턴은 다음과 같습니다.

foreach (SPSite site in this.WebApplication.Sites)
{
  try
  {
    ...
  }
  finally
  {
    site.Dispose();
  }
}

처분을 부르는 것은 열거가 깨지지 않습니다. 객체가 사용하는 관리되지 않는 메모리를 정리합니다.

다른 팁

여기에 지침http://www.sharepointdevwiki.com/display/public/when++dispose+sharepoint+ objects

그것을 제안합니다

//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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top