SPContext.Site를 클래스 라이브러리에 전달하는 경우 언제 Dispose를 호출해야 합니까?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/75597

  •  10-12-2019
  •  | 
  •  

문제

나는 이것에 대한 약간의 온전한 점검을 찾고 있습니다!

나는 많은 수업을 보고 있어요. 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

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