2011-02-23 4 views
5

메모리 누수가 있습니까? 나는 메모리 누수를 더 잘 이해하려고 노력해 왔지만, 내가 이것을 고쳤는지 말할 수 없다. 그렇지 않은 경우 SPweb 개체와 SPSite 개체를 올바르게 처리하려면 어떻게해야합니까?SharePoint 메모리 누수가

using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb()) //Open SP Web 
{ 
    SPListCollection collList = oWebsite.Lists; //Open Lists 

    foreach (SPList oList in collList) 
    //For Each List Execute this 
    { 
     if (!oList.Hidden) 
     //If the list is hidden do this else nothing 
     { 
      ListSitesDropDownBox.Items.Add(new ListItem(SPEncode.HtmlEncode(oList.Title), SPEncode.HtmlEncode(oList.Title))); 
      ViewState["Item" + counter] = SPEncode.HtmlEncode(oList.Title); 
      counter++; 
     } 
    } 
} 

답변

13

그래, 그렇습니다. SPWeb을 처분하지만 SPSite 처분을 잊어 버립니다.
올바른 방법은이 작업을 수행합니다 :

using (var site = new SPSite(webUrl)) { 
    using (var web = site.OpenWeb()) { 
     // ... 
    } 
} 

하지만 코드 중첩을 줄이기 위해 외부 using에 대한 중괄호를 생략 :이 동등이라고

using (var site = new SPSite(webUrl)) 
using (var web = site.OpenWeb()) { 
    // ... 
} 

참고. 보강 규칙은 if과 동일합니다.

몇 가지 문체의 말 :

  • 하십시오, don't use Systems Hungarian in C# code. 그냥 list입니다.
  • 위의 코드를 다시 쓰는 의견은 의미가 없습니다. 코드를 건설적으로 유지하십시오. 즉 코드의 목적을 설명하십시오. 처음에 그런 대신 그 4 코멘트, 당신이 작성한한다 뭔가 : 당신의 사용 만 SPWeb에서 당신은 SPSite 개체를 폐기하지 않는

    // Populate drop-down list with list names and save them in ViewState 
    
+2

+1. 이것은 SPxxx 개체로 작업 할 때 읽어야하는 문서입니다 - http://msdn.microsoft.com/en-us/library/aa973248.aspx –

+0

List를 말할 때 무엇을 언급합니까? – atrljoe

+0

이름 지정 변수에 헝가리 표기법을 사용합니다. 즉, 변수 이름 앞에 유형 이름 약어를 접두사로 붙입니다. 'o'는 '객체'를 의미합니다. 그러나 강력한 형식 시스템이 있고 VS가 IntelliSense와 같은 기능을 가진 강력한 IDE이기 때문에 C#에서는 이것이 절대적으로 필요하지 않습니다. 나는 당신이'oWebsite' 대신에'website'를 사용하고,'collList' 외에도'oList','lists' (또는'allLists') 대신'list'를 사용할 것을 권합니다. –

2

.

0

다른 사람들은 당신의 질문에 대답했다,하지만 난 당신이 당신이 SPDisposeCheck를 통해 빌드 실행되어야 함을 추가 할 것입니다 : http://archive.msdn.microsoft.com/SPDisposeCheck
그것은 완벽하지 않습니다하지만 초기에 많은 문제에 당신을 팁을 것입니다.

관련 문제