SharePoint Spsite 처분
-
06-07-2019 - |
문제
내가 가진 시나리오는 웹 애플리케이션의 모든 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