Best Practices
다음 과 같이 소스는 메모리를 많이 사용한다고 한다.
그리고 IIS 에서의 리사이클 주기를 짧게 하여 성능 상의 문제를 일으킨다고 한다.
public void GetNavigationInfo()
{
   SPWeb oSPWeb = SPContext.Web;

   // .. Get information oSPWeb for navigation .. 
   foreach(SPWeb oSubWeb in oSPWeb.GetSubWebsForCurrentUser())
   {
      // .. Add subweb information for navigation .. 
    }
}

아래와 같이 Dispose 를 권장한다.
public void GetNavigationInfo()
{
   SPWeb oSPWeb = SPContext.Web;
   foreach(SPWeb oSubWeb in oSPWeb.GetSubWebsForCurrentUser()))
   {
      // .. Add subweb information for navigation ..
      oSubWeb.Dispose();
   }
}
캐쉬 데이타를 사용할 경우에는 Lock 을 하자 아래의 소스 처럼 캐쉬 데이터를 사용할 경우 동 시간대의 접속 자들은 같은 오브젝트에 같은 데이터를 업데이트를 하려고 한다. 이 경우 캐쉬데이타의 깨짐 현상이 일어 날수 있다고 한다.
public void CacheData()
{
   SPListItemCollection oListItems;
   oListItems = (SPListItemCollection)Cache["ListItemCacheName"];
   
   if(oListItems == null)
   {
      oListItems = DoQueryToReturnItems();
      Cache.Add("ListItemCacheName", oListItems, ..);
   }
}
이 현상을 방지 하기 위해서 다음과 같은 locking 처리가 필요하다.
public void CacheData()
{
   DataTable oDataTable;
   SPListItemCollection oListItems;

   lock(this)
   {
      oDataTable = (DataTable)Cache["ListItemCacheName"];
      if(oDataTable == null)
      {
         oListItems = DoQueryToReturnItems();
         oDataTable = oListItems.GetDataTable();
         Cache.Add("ListItemCacheName", oDataTable, ..);
      }
   }
}

+ Recent posts