SPContext.Site를 클래스 라이브러리에 전달하는 경우 언제 Dispose를 호출해야 합니까?
문제
나는 이것에 대한 약간의 온전한 점검을 찾고 있습니다!
나는 많은 수업을 보고 있어요. SPSite
또는 SPWeb
클래스의 생성자로.
클래스는 다음을 사용하여 인스턴스화됩니다. SPContext.Site
SPSite 매개변수로
예를 들어
public MyClass {
SPWeb _web;
public MyClass(SPSite site) {
_web = site.RootWeb;
}
// Other methods that make use of _web
}
해야 한다 _web
처분될까?_web은 단지 SPContext.Site.RootWeb에 대한 포인터입니까, 아니면 다른 복사본이 있습니까? SPWeb
폐기해야 하는 것인가요?
나도 그걸 알아 SPContext.Site.OpenWeb()
전화해야 해 Dispose()
.
그러면 위의 사용법은 어떻습니까?
통과할 것이다 SPSite
/ SPWeb
지역 변수에 할당하면 항상 동일한 참조를 갖습니다. SPContext
?
해결책
귀하의 경우 _web
에서 가져오므로 폐기할 필요가 없습니다. RootWeb
및 다음에서 검색된 웹 개체 RootWeb
폐기할 필요는 없습니다.
EIDT
또한, 만약 SPSite
생성자에 매개변수로 전달된 객체는 SPContext
, 폐기할 필요가 없습니다.그렇지 않으면 요구 사항에 따라 호출된 클래스 또는 호출 클래스에서 삭제되어야 합니다.
다른 팁
SPSite.RootWeb 속성에 대해 Dispose()를 명시적으로 호출하지 마세요.폐기 정리는 SharePoint 및 .NET Framework에서 자동으로 처리됩니다.기존 SharePoint 사용자 지정의 경우 명시적인 RootWeb Dispose를 제거하여 SPContext.Current.Web이 SPSite.RootWeb과 동일한 경우를 방지하는 것이 좋습니다.SPContext의 변형에서 얻은 RootWeb을 폐기할 때 문제가 발생할 수 있습니다(예:SPContext.Site.RootWeb, SPContext.Current.Site.RootWeb 및 GetContextSite(Context).RootWeb ).
더 많은 방문을 원하시면...MSDN