关于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没有关系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值