응용 프로그램 변수를 사용하여 캐싱에 대한 대안과 관련된 잠재적 문제가 궁금합니다. 처음에는 하나의 응용 프로그램 변수에 모든 응용 프로그램 데이터를 저장하는 사용자 지정 응용 프로그램 개체가 있습니다.이 개체는 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을 하나의 응용 프로그램 변수로 구성합니다. 내 생각에 이것은 낮은 오버 헤드이며 데이터를 읽을 때 데이터 세트에 대한 데이터 판독기를 버릴 필요가 없다는 것이 었습니다.생각하십니까? 의견? 이것으로 당신은 상처를 입었습니까?
도움이되는 답변에 감사드립니다. 이러한 문제를 고려할 때 데이터 집합 캐싱을 고려하는 것이 좋습니다. – shxo