ASP.NET缓存应用程序变量

ASP.NET缓存应用程序变量,asp.net,caching,variables,Asp.net,Caching,Variables,我想知道使用应用程序变量进行缓存的潜在问题。在前言中,我有一个自定义应用程序对象,它将所有应用程序数据存储在一个应用程序变量中–该对象将数据组织在XML云中,并将云存储在一个变量中以提高性能 我知道数据集缓存,但我的所有DAL对象都选择只读数据读取器以提高性能,因此,如果解决方案涉及数据集,我有大量的重构工作要做——这并不理想。记录数量从低到中等,涉及网站数据和中小型项目管理应用程序;我们说的不是50万张唱片 以下是我打算在DAL类中使用的函数结构Select All: if (AppSetti

我想知道使用应用程序变量进行缓存的潜在问题。在前言中,我有一个自定义应用程序对象,它将所有应用程序数据存储在一个应用程序变量中–该对象将数据组织在XML云中,并将云存储在一个变量中以提高性能

我知道数据集缓存,但我的所有DAL对象都选择只读数据读取器以提高性能,因此,如果解决方案涉及数据集,我有大量的重构工作要做——这并不理想。记录数量从低到中等,涉及网站数据和中小型项目管理应用程序;我们说的不是50万张唱片

以下是我打算在DAL类中使用的函数结构Select All:

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;
因此,我的缓存将所有内容返回给调用进程,然后我链接以按活动、按位置筛选对象。在插入、更新和删除时,我有一行代码来清除缓存。同样,我的优势是使用只读数据读取器来提高性能,我的应用程序对象将XML组织到一个应用程序变量中。我的想法是,这是低开销的,当我只是读取数据时,不必放弃数据集的数据读取器


想法?意见?你被这件事伤到了吗

是的,有点精神创伤。将应用程序变量用作缓存的问题是,您失去了缓存的一些最佳功能。例如,asp.net缓存提供了一些很棒的缓存失效功能。这确保了缓存不会越来越多地占用越来越多的资源,并且确保缓存保持新鲜(例如,如果源于数据库)


你真的应该考虑在工作中使用合适的工具

谢谢你的帮助。考虑到这些问题,考虑数据集缓存可能是明智的。