문제

안녕하세요. 목록 항목을 가져오려고 하는데 이것이 좋은 방법인지 알고 싶습니다.

   SPSite spsite = new SPSite(SPContext.Current.Web.Url);
                    SPWeb spWeb = spsite.RootWeb;
                    SPList spList = spWeb.Lists.TryGetList("MyList");
//here is the code to fetch the values...

50개의 하위 사이트와 그 안에 더 많은 하위 사이트가 포함된 사이트 모음이 1개 있습니다.내 질문은 다음과 같습니다.

하위 사이트 번호 10 아래의 하위 사이트 중 하나에 있고 이 코드가 실행된다고 가정하면 여전히 루트 웹 목록을 선택하거나 오류가 발생합니까?

SPContext.Current.Web.Url의 값이 해당 위치의 현재 URL이 되기 때문에 혼란스럽습니다.그러면 코드가 계속 작동할까요?

도움이 되었습니까?

해결책

처분되지 않은 새 사이트를 만드는 것은 spcontext.current.web.url은 문자열 URL 만 생성합니다.

올바른 방법 :

   using (SPSite spsite = new SPSite(SPContext.Current.Web.Url))
   {
        SPWeb spWeb = spsite.RootWeb;

        SPList spList = spWeb.Lists.TryGetList("MyList");
   }
.

새로운 것이 없으므로 SPWEB를 처분 할 필요가 없습니다.새 Spsite Web 객체를 사용합니다.폐기하면 ULS에서 오류가 발생합니다.

이전에 닫힌 SPWEB 객체에 대한 SPREQUEST 사용을 감지했습니다.부디 모든 객체가 완료되면 SPWEB 객체를 닫습니다. 그들을 전에는 아니지만 이전에는 아니지만

코드를 사용하는 또 다른 방법은 다음과 같습니다.

SPWeb spWeb = SPContext.Current.Site.RootWeb;
SPList spList = spWeb.Lists.TryGetList("MyList");
.

보시다시피 코드 / 시스템 리소스가 적합하고 적은 코드 / 시스템 리소스를 처리 할 수없는 현재 사이트 RootWeb 객체를 사용하여 폐기 할 필요가 없습니다!

다른 팁

@robert가 지적한 것처럼 루트 웹을 픽업합니다.그러나 SPWeb 속성에서 검색된 SPSite.RootWeb 객체를 Dispose 할 필요가 없습니다.Spcontext SPSite에서 SPSite spsite = SPContext.Current.Site; 객체를 직접 가져올 수도 있고 따라서 명시 적으로 배치되어야하는 새 파일을 인스턴스화하는 대신 폐기 할 필요가 없습니다.

루트 웹을 픽업합니다.

그러나 "명령문 사용"을 사용하지 않는 경우 SPSITE를 처분하는 것을 잊지 마십시오.

spsite.Dispose()
.

당신이 사용할 수있는 SPContext.Current.Site.Url, 코드 내부에 SPSite 객체를 생성하는 동안 다음을 사용하십시오. site.OpenWeb(), 이는 루트 웹을 제공합니다(SPSite 개체는 사이트 URL로 생성되므로).항상 사용하는 것이 더 좋습니다 using 물건을 처분하는 것.

using (SPSite site=new SPSite(SPContext.Current.Site.Url))
            {
                using(SPWeb web=site.OpenWeb())//always gets you the root web
                {

                }
             }

이 블로그를 참조하세요 SPDisposeCheck 모범 사례.

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