我想知道使用应用程序变量进行缓存的替代方案。作为前言,我有一个自定义应用程序对象,它将所有应用程序数据存储在一个应用程序变量中 - 该对象在XML云中组织数据,并将云存储在一个变量中以提高性能。
我知道DataSet缓存,但我的所有DAL对象都选择(只读)数据读取器以提高性能,因此如果解决方案涉及DataSet,我需要进行大量的重构 - 不理想。记录数量低至中等,涉及网站数据和中小型项目管理应用程序;我们不是在说五十万条记录。
这是我打算在我的DAL类中使用的函数的结构(全选):
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,然后我LINK过滤对象(按活动,按位置)。在插入,更新和删除时,我有一行代码来清除缓存。同样,我的优点是使用只读数据读取器来提高性能,我的应用程序对象将XML组织到一个应用程序变量中。我的想法是,这是一个低开销,当我只是在读数据时不必丢弃数据集的数据读取器。
思考?意见?你受到了这种创伤吗?
答案 0 :(得分:1)
你应该考虑使用正确的工具来完成工作