zoukankan      html  css  js  c++  java
  • 关于XML配置使用的个人感觉

    其实昨天发表的的《利用代码读取XML文档》
    http://mqingqing123.cnblogs.com/archive/2005/10/11/252410.html

    介绍了如何使用代码读取XML配置。这里谈一下对这种配置使用的看法,纯属个人意见,不保证正确性

    在那篇文章里其实是对二十四画生发表的从ASP.NET Portal Starter Kit中学到的调整顺序新思路
    的延续。
    那篇文章的网址如下:
    http://www.cnblogs.com/esshs/archive/2005/04/18/139829.html

    在那篇文章里提到了Portal可能的一个bug,当然正如你在他随后的评论里看到,这并不是一个bug,而是由于
    “查一查InitializeComponent() 中,有没有连结事件的代码如:this.upBtn.Click += new System.Web.UI.ImageClickEventHandler(this.UpDown_Click);,不知怎么搞得VS有时会自动删除这些代码。有一次我为这个问题整整检查了一天,那才叫晕。”的原因

    但是我感觉在使用XML配置时最后必须而且也应该重视的一个重要因素--缓存,请看Portal在configtion.cs里实现
    GetSiteSettings其实就是读取XML文档

    public static SiteConfiguration GetSiteSettings()
      {
       SiteConfiguration siteSettings 
    = (SiteConfiguration) HttpContext.Current.Cache["SiteSettings"];
       
    // 如果缓存不存在,则读取XML文档
       if(siteSettings == null)
       {
            siteSettings 
    = new SiteConfiguration();
        
    // 检索XML的实际位置
        string configFile = HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["configFile"]);
        
    // 赋值
        siteSettings.Tab.TabIdColumn.AutoIncrement = true;
        siteSettings.Module.ModuleIdColumn.AutoIncrement 
    = true;
        siteSettings.ModuleDefinition.ModuleDefIdColumn.AutoIncrement 
    = true;
        
    // Load the XML data into the DataSet
        siteSettings.ReadXml(configFile);
      
        
    // Store the dataset in the cache
        HttpContext.Current.Cache.Insert("SiteSettings", siteSettings, new CacheDependency(configFile));
       }
       
    return siteSettings;
      }


    SaveSiteSettings其实就是写入XML文档

    public void SaveSiteSettings()
      {
       
    // Obtain SiteSettings from the Cache
       SiteConfiguration siteSettings = (SiteConfiguration) HttpContext.Current.Cache["SiteSettings"];
       
    // 检测缓存
       if(siteSettings == null)
       {
        
    // If SaveSiteSettings() is called once, the cache is cleared.  If it is
        
    // then called again before Global.Application_BeginRequest is called, 
        
    // which reloads the cache, the siteSettings object will be Null 
        siteSettings = GetSiteSettings();
       }
       
    string configFile = HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["configFile"]);
       
    // Object is evicted from the Cache here.  
       siteSettings.WriteXml(configFile);
      }
     }

     请注意:SaveSiteSettings的英文解释,这里没有进行翻译,是读者自己根据英文理解

    如果Configuration.cs仅仅用ReadXML和WriteXML确实没有多大使用价值,但是他配置了缓存,而且使用了缓存依赖。所以需要说明缓存的优点和缺点

    优点:提高性能,原因非常简单,不说了
    确定:不能及时更新页面 ,例如一场运动比赛,可能从始到末一直是0:0,那么当客户端访问服务器页面时,利用缓存,客户更本就不需要更新比赛结果。但是也有可能比赛一直变动,0:1,1:1,这样经常变动的情况也是存在的,在这种情况下,如果你利用缓存,可能比赛已经是10:10了,客户还显示0:0,因此这就是缓存致命的缺点

    为了解决这个问题,提出了缓存依赖,也就是说缓存的更新依赖与键值或者文件。
    在Portal里就是利用的是文件依赖,当你更改XML配置文档时,系统就自动清除缓存,然后从新读取配置文件,使得你的配置即使起作用,这种缓存的实现请注意下面的代码
       HttpContext.Current.Cache.Insert("SiteSettings", siteSettings, new CacheDependency(configFile));
       基本意义就是SiteSettings缓存依赖文件configFile,只要configFile稍微有点分吹草动,缓存就失效,这样就能够实现及时更新

    所以,昨天有人说这种读取XML文档的代码没有价值,我感觉是有价值的,主要是这种价值适用在什么地方,并不是任何地方用该方法都好
     从Portal看,只所以用这种配置是因为,一个网站可能访问者很多,但是页面的管理并不是一直变动,也就意味者系统并不是经常读取XML,就像你看到www.asp.net,它的框架一直不变,就不需要读取XML配置。

    注意:你往Portal里加入数据(而不是框架),它是存放在SQL数据库里,这和XML没有关系
  • 相关阅读:
    问题事件名称 clr20r3
    DataTable.Compute()用法
    XmlDocument.LoadXml(string) 转换问题
    反射原理读取对象属性并设置属性值
    读取XML某一个节点 条件筛选
    linq 对象属性排序
    winform与webbrowse之间的交互
    Linux(CentOS)下安装NVIDIA GPU驱动
    基于英伟达GPU训练TensorFlow模型
    基于Hadoop伪分布式模式集群搭建Spark环境
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/252794.html
Copyright © 2011-2022 走看看