快速业务通道

用ASP.NET缓存提高站点性能

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
。因此,用户将频繁地发出尝试访问缓存值的请求,然后发现缓存值为空,不得不等待缓存值的重新填充。我希望在未来的ASP.NET版本中看到一个附加的回调,可以称为CachedItemExpiredBut

NotRemovedCallback,如果定义了该回调,则必须在删除缓存项之前完成执行。

缓存数据引用模式

每当我们尝试访问缓存中的数据时,都应该考虑到一种情况,那就是数据可能已经不在缓存中了。因此,下面的模式应该普遍适用于您对缓存的数据的访问。在这种情况下,我们假定已缓存的数据是一个数据表。

public DataTable GetCustomers(bool BypassCache)
{
 string cacheKey = "CustomersDataTable";
 object cacheItem = Cache[cacheKey] as DataTable;
 if((BypassCache) || (cacheItem == null))
 {
  cacheItem = GetCustomersFromDataSource();
  Cache.Insert(cacheKey, cacheItem, null,
  DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey), TimeSpan.Zero);
 }
 return (DataTable)cacheItem;
}

关于此模式,有以下几点需要注意:

1) 某些值(例如,cacheKey、cacheItem和缓存持续时间)是一次定义的,并且只定义一次。

2) 可以根据需要跳过缓存-例如,当注册一个新客户并重定向到客户列表后,最好的做法可能就是跳过缓存,用最新数据重新填充缓存,该数据包括新插入的客户。

3) 缓存只能访问一次。这种做法可以提高性能,并确保不会发生NullReferenceExceptions,因为该项在第一次被检查时是存在的,但第二次检查之前就已经到期了。

4) 该模式使用强类型检查。C#中的“as”运算符尝试将对象转换为类型,如果失败或该对象为空,则只返回null(空)。

5) 持续时间存储在配置文件中。在理想的情况下,所有的缓存依赖项(无论是基于文件的,或是基于时间的,还是其他类型的依赖项)都应该存储在配置文件中,这样就可以进行更改并轻松地测量性能。我还建议您指定默认缓存持续时间,而且,如果没有为所使用的cacheKey指定持续时间,就让GetCacheSecondsFromConfig()方法使用该默认持续时间。

与本文相关的代码示例(CachedDemo.msi,参见本书示例光盘)是一个helper类,它将处理上述所有情况,可以只书写一行或两行代码访问缓存的数据。

小结

缓存可以使应用程序的性能得到很大的提高,因此在设计应用程序以及对应用程序进行性能测试时应该予以考虑。应用程序总会或多或少地受益于缓存,当然有些应用程序比其他应用程序更适合使用缓存。对ASP.NET提供的缓存选项的深刻理解是任何ASP.NET开发人员应该掌握的重要技巧。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号