2010-06-24 6 views
0

응용 프로그램 변수를 사용하여 캐싱에 대한 대안과 관련된 잠재적 문제가 궁금합니다. 처음에는 하나의 응용 프로그램 변수에 모든 응용 프로그램 데이터를 저장하는 사용자 지정 응용 프로그램 개체가 있습니다.이 개체는 XML 클라우드에 데이터를 구성하고 성능을 위해 하나의 변수에 클라우드를 저장합니다.ASP.NET 캐시 응용 프로그램 변수

DataSet 캐싱에 대해 알고 있지만 성능을 위해 모든 DAL 개체가 데이터 판독기를 선택 (읽기 전용)하므로 솔루션에 DataSet이 관련되어 있으면 리팩토링을 수행하는 것이 이상적이지 않습니다. 기록 개수는 웹 사이트 데이터 및 중소 프로젝트 관리 응용 프로그램과 관련된 중간 정도 수준입니다. 우리는 50 만 건의 레코드를 말하는 것이 아닙니다.

if (AppSetting.GetSetting(_CacheSettingName) == "") 
    { 
     SqlHelper objSqlHelper = new SqlHelper(); 
     XmlReader objReader = objSqlHelper.GetXmlReaderByCmd("Select * From FAQ FOR XML PATH('item'), root('" + _CacheSettingName + "')"); 

//load Cache  

     StringBuilder _xml = new StringBuilder(); 
     objReader.Read(); 
     while (objReader.ReadState != ReadState.EndOfFile) 
     { 
      _xml.Append(objReader.ReadOuterXml()); 
     } 
     objSqlHelper.Dispose(); 
     AppSetting.SaveSetting(_CacheSettingName, _xml.ToString()); 
    } 
    //we have cache loaded 
    // now load the object list from the XML cloud from the application cache  
    List<FAQBLL> objFAQList = new List<FAQBLL>(); 
    FAQBLL objFAQ; 
    XmlDocument oXmlDocument = new XmlDocument(); 
    oXmlDocument.LoadXml(AppSetting.GetSetting(_CacheSettingName)); 
    foreach (XmlNode oNode in oXmlDocument.FirstChild.ChildNodes) 
    { 
     objFAQ = new FAQBLL(); 
     objFAQ.ID = Convert.ToInt32(oNode.SelectSingleNode("ID").InnerXml); 
     objFAQ.Question = oNode.SelectSingleNode("Question").InnerXml; 
     objFAQ.Answer = oNode.SelectSingleNode("Answer").InnerXml; 
     objFAQList.Add(objFAQ); 
     objFAQ = null; 

    } 

    return objFAQList.Count > 0 ? objFAQList: null; 

그래서 내 캐시가 모든 호출 PROC로 복귀, 그때로 (객체를 필터링을 사용하고 있습니다 : 여기

은 (모두 선택) 내 DAL 클래스에서 사용하려는 함수의 구조 활성, 위치 별). 삽입, 업데이트 및 삭제시 한 줄의 코드로 캐시를 지울 수 있습니다. 다시 말하지만 성능을 위해 읽기 전용 데이터 판독기를 사용하는 장점이 있으며 응용 프로그램 객체는 XML을 하나의 응용 프로그램 변수로 구성합니다. 내 생각에 이것은 낮은 오버 헤드이며 데이터를 읽을 때 데이터 세트에 대한 데이터 판독기를 버릴 필요가 없다는 것이 었습니다.

생각하십니까? 의견? 이것으로 당신은 상처를 입었습니까?

답변

1

예, 조금 외상입니다. 응용 프로그램 변수를 캐시로 사용하면 문제가되는 것은 캐시의 최상의 기능 중 일부가 상실된다는 것입니다. 예를 들어, asp.net 캐시는 몇 가지 멋진 캐시 무효화 기능을 제공합니다. 이렇게하면 a) 캐시가 점점 더 많은 리소스를 차지하지 않고 b) 캐시가 신선한 상태로 남을 수 있습니다 (예 : 데이터베이스에서 가져온 경우).

실제로 작업에 적합한 도구를 사용하는 것이 좋습니다.

+0

도움이되는 답변에 감사드립니다. 이러한 문제를 고려할 때 데이터 집합 캐싱을 고려하는 것이 좋습니다. – shxo

관련 문제