• 缓存文件缓存依赖中cachedependency对象及周边小讲


    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

        


    近来正在学缓存依附,现把一些学习资料整顿如下:

        


    缓存依附重要提供以下功能:
    1.SQL 缓存依附项可用于应用程序缓存和页输出缓存。
    2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依附项。
    3.可以在网络园(一台服务器上存在多个处置器)或网络场(多台服务器运行同一应用程序)中使用 SQL 缓存依附项。
    4.与 SQL 缓存依附项关联的数据库操作比较简单,因此不会给服务器带来很高的处置成本。


        

    当初把与缓存依附相关的对象集合如下,并对差异性停止了必定水平的分析……
            缓存依附重要由3个核心类来实现:CacheDependency、AggregateCacheDependency、SqlCacheDependency。CacheDependency 类是 AggregateCacheDependency 类和 SqlCacheDependency 类的父类。

    CacheDependency跟踪缓存依附项,缓存依附项可以是应用程序的 Cache 中的文件、目录或与其他对象的键,可用于实现自定义缓存依附。//对文件可起作用。

    SqlCacheDependency类在所有受支撑的 SQL Server 版本 (7.0, 2000, 2005) 上监视特定的 SQL Server 数据库表,以便在该表发生变动时,自动从 Cache 中删除与该表关联的项。数据库表发生变动时,将自动删除缓存项,并向 Cache 中添加新版本的项。在使用 SQL Server 2005 数据库时,SqlCacheDependency 类还支撑与 System.Data.SqlClient.SqlDependency 类停止集成。使用 SQL Server 2005 的查询通知机制来检测使 SQL 查询结果无效的数据变动。与 SQL 查询关联的任何缓存项都将从 System.Web.Caching.Cache 中移除。在使用 SQL Server 2005 时,可以使用 SqlCacheDependency 类向应用程序的 Cache 添加依附于 SQL Server 数据库表或 SQL 查询的项。//对数据表的支撑

    AggregateCacheDependency类监视依附项对象的集合,以便在任何依附项对象变动时,该缓存项都会自动移除。数组中的对象可以是CacheDependency或者SqlCacheDependency对象、从 CacheDependency派生的自定义对象或这些对象的任意组合.

    AggregateCacheDependency类与CacheDependency类的不同之处在于前者答应您将不同类型的多个依附项与单个缓存项关联。例如,如果您创建一个从 SQL Server 数据库表和 XML 文件导入数据的页,则可创建一个SqlCacheDependency对象来表示数据库表的依附项,以及一个CacheDependency来表XML 文件的依附项。可创建 AggregateCacheDependency类的一个实例,将每一个依附项添加到该类中,而不是为每一个依附项调用 Cache.Insert 方法。然后,可使用单个Insert 调用使该页依附于 AggregateCacheDependency实例。

        每日一道理
    春蚕死去了,但留下了华贵丝绸;蝴蝶死去了,但留下了漂亮的衣裳;画眉飞去了,但留下了美妙的歌声;花朵凋谢了,但留下了缕缕幽香;蜡烛燃尽了,但留下一片光明;雷雨过去了,但留下了七彩霓虹。

        

    其中,本章重要讲述 CacheDependency的用法。

    CacheDependency有几中重载,各作用如下。

    //假设缓存的来源文件是当前目录下的data.xml文件

    //缓存依附的文件路径
        CacheDependency mydep = new CacheDependency("data.xml");

    //缓存依附的文件可以有多个
        CacheDependency mydep1=new CacheDependency(new string []{"data.xml","data1.xml"});

    //检查缓存依附变动的依据时光
        CacheDependency mydep2 = new CacheDependency("data.xml", DateTime.Now);

    //检查多个依附文件变动的依据时光
        CacheDependency mydep3 = new CacheDependency(new string[] { "data.xml", "data1.xml" }, DateTime.Now);

    //检查依附多个文件,也依附多个缓存键值
        CacheDependency mydep4 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" });

    //关联依附,还可以依附于另一个文件缓存依附
        CacheDependency mydep5 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, mydep);

    //文件和键值上次修改的依据时光
        CacheDependency mydep6 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, DateTime.Now);

    //文件、另一个缓存依附和键值上次修改的依据时光
        CacheDependency mydep6 = new CacheDependency(new string[] { "data.xml", "data1.xml" },new string[] { "Category", "Category1" }, mydep,DateTime.Now);

        实例:

    public partial class CacheDependencyPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                GetData();
            }
        }
        private void GetData()
        {
            DataTable tableData = new DataTable();
            if (Cache["data"] == null)//用于引用该项的缓存键。如果缓存改变,则true;概况百度c#的Cache对象!
            {
                DataSet ds = new DataSet();
                string filePath = Server.MapPath("~/App_Data/XMLFile.xml");//服务器数据绝对地址
                ds.ReadXml(filePath);//读取文件内的数据,保存在ds里
                tableData = ds.Tables[0];
                CacheDependency cdy = new CacheDependency(filePath,DateTime.Now);
                Cache.Insert("data", tableData, cdy);//通过使用 Insert(重载Insert方法)方法将项添加到缓存中
                //if (cdy.HasChanged)
                //{
                    System.Diagnostics.Debug.WriteLine("Xml已变革");
                //}
            }
            else
            {
                tableData = (DataTable)Cache["data"];//通过指定其键和值将项添加到缓存中
            }
            grvCS.DataSource = tableData;
            grvCS.DataBind();
    
            //DataSet mds = new DataSet();//验证数据绑定用,因为xml层次结构的问题致使了数据绑定失败;
            //mds.ReadXml(Server.MapPath("~/App_Data/XMLFile.xml")); 
            //grvCS.DataSource = mds;
            //grvCS.DataBind();
        }
    }

        

    其中

    1.记得在view页面为gridview绑定响应的数据字段。

    2.注意xml的格式,作者本人在实验的时候就应Xml数据格式的问题致使读取的数据绑定失败。

    文章结束给大家分享下程序员的一些笑话语录: 马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。

  • 相关阅读:
    JqGrid在IE8中表头不能分组的解决办法
    Task 异步小技巧
    封装好的socket,拿去用
    反射 实现不同模型相同属性赋值 第二集(automapper)
    .net破解二(修改dll)
    .net破解一(反编译,反混淆-剥壳)
    c/s 自动升级(WebService)
    反射实现不同模型相同属性赋值
    row_number() over()分页查询
    SQL函数
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3084628.html
Copyright © 2020-2023  润新知