知识大全 方法和最佳实践[2]
Posted 知
篇首语:最好的治疗是在温暖、干净、干燥的环境下养猪。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 方法和最佳实践[2]相关的知识,希望对你有一定的参考价值。
ASP.NET缓存:方法和最佳实践[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
绝对到期 此示例将对受时间影响的数据缓存一分钟 一分钟过后 缓存将到期 注意 绝对到期和滑动到期(见下文)不能一起使用
Cache Insert( key myFrequentlyAccessedData null
System Web Caching Cache NoAbsoluteExpiration
TimeSpan FromMinutes( ));
滑动到期 此示例将缓存一些频繁使用的数据 数据将在缓存中一直保留下去 除非数据未被引用的时间达到了一分钟 注意 滑动到期和绝对到期不能一起使用
更多选项
除了上面提到的依赖项 我们还可以指定项的优先级(依次为 low high NotRemovable 它们是在 System Web Caching CacheItemPriority 枚举中定义的)以及当缓存中的项到期时调用的 CacheItemRemovedCallback 函数 大多数时候 默认的优先级已经足够了 — 缓存引擎可以正常完成任务并处理缓存的内存管理 CacheItemRemovedCallback 选项考虑到一些很有趣的可能性 但实际上它很少使用 不过 为了说明该方法 我将提供它的一个使用示例
CacheItemRemovedCallback 示例 System Web Caching CacheItemRemovedCallback callback = new System Web Caching CacheItemRemovedCallback (OnRemove);
Cache Insert( key myFile null
System Web Caching Cache NoAbsoluteExpiration
TimeSpan Zero
System Web Caching CacheItemPriority Default callback);
public static void OnRemove(string key
object cacheItem
System Web Caching CacheItemRemovedReason reason)
AppendLog( The cached value with key + key +
was removed from the cache Reason: +
reason ToString());
该示例将使用 AppendLog() 方法(这里不讨论该方法 请参阅 Writing Entries to Event Logs)中定义的任何逻辑来记录缓存中的数据到期的原因 通过在从缓存中删除项时记录这些项并记录删除的原因 您可以确定是否在有效地使用缓存或者您是否可能需要增加服务器上的内存 注意 callback 是一个静态(在 VB 中为 Shared)方法 建议使用该方法的原因是 如果不使用它 保存回调函数的类的实 例将保留在内存中 以支持回调(对 static/Shared 方法则没有必要) 该特性有一个潜在的用处 — 在后台刷新缓存的数据 这样用户永远都不必等待数据被填充 但数据始终保持相对较新的状态 但实际上 此特性并不适用于当前版本的缓存 API 因为在从缓存中删除缓存的项之前 不触发或不完成回调 因此 用户将频繁地发出尝试访问缓存值的请求 然后发现缓存值为空 不得不等待缓存值的重新填充 我希望在未来的 ASP NET 版本中看到一个附加的回调 可以称为 CachedItemExpiredButNotRemovedCallback 如果定义了该回调 则必须在删除缓存项之前完成执行
缓存数据引用模式
每当我们尝试访问缓存中的数据时 都应该考虑到一种情况 那就是数据可能已经不在缓存中了 因此 下面的模式应该普遍适用于您对缓存的数据的访问 在这种情况下 我们假定已缓存的数据是一个数据表
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;
关于此模式 有以下几点需要注意
? 某些值(例如 cacheKey cacheItem 和缓存持续时间)是一次定义的 并且只定义一次
? 可以根据需要跳过缓存 — 例如 当注册一个新客户并重定向到客户列表后 最好的做法可能就是跳过缓存 用最新数据重新填充缓存 该数据包括新插入的客户
? 缓存只能访问一次 这种做法可以提高性能 并确保不会发生 NullReferenceExceptions 因为该项在第一次被检查时是存在的 但第二次检查之前就已经到期了
? 该模式使用强类型检查 C# 中的 as 运算符尝试将对象转换为类型 如果失败或该对象为空 则只返回 null(空)
? 持续时间存储在配置文件中 在理想的情况下 所有的缓存依赖项(无论是基于文件的 或是基于时间的 还是其他类型的依赖项)都应该存储在配置文件中 这样就可以进行更改并轻松地测量性能 我还建议您指定默认缓存持续时间 而且 如果没有为所使用的 cacheKey 指定持续时间 就让 GetCacheSecondsFromConfig() 方法使用该默认持续时间
相关的代码示例是一个 helper 类 它将处理上述所有情况 但允许通过一行或两行代码访问缓存的数据 请下载 CacheDemos msi
小结
缓存可以使应用程序的性能得到很大的提高 因此在设计应用程序以及对应用程序进行性能测试时应该予以考虑 应用程序总会或多或少地受益于缓存 当然有些应用程序比其他应用程序更适合使用缓存 对 ASP NET 提供的缓存选项的深刻理解是任何 ASP NET 开发人员应该掌握的重要技巧
尽早缓存 经常缓存
您应该在应用程序的每一层都实现缓存 向数据层 业务逻辑层 UI 或输出层添加缓存支持 内存现在非常便宜 — 因此 通过以智能的方式在整个应用程序中实现缓存 可以获得很大的性能提高
缓存可以掩盖许多过失
缓存是一种无需大量时间和分析就可以获得 足够良好的 性能的方法 这里再次强调 内存现在非常便宜 因此 如果您能通过将输出缓存 秒 而不是花上一整天甚至一周的时间尝试优化代码或数据库就可以获得所需的性能 您肯定会选择缓存解决方案(假设可以接受 秒的旧数据) 缓存正是那些利用 % 付出获得 % 回报的特性之一 因此 要提高性能 应该首先想到缓存 不过 如果设计很糟糕 最终却有可能带来不良的后果 因此 您当然也应该尽量正确地设计应用程序 但如果您只是需要立即获得足够高的性能 缓存就是您的最佳选择 您可以在以后有时间的时候再尽快重新设计应用程序
页面级输出缓存
作为最简单的缓存形式 输出缓存只是在内存中保留为响应请求而发送的 HTML 的副本 其后再有请求时将提供缓存的输出 直到缓存到期 这样 性能有可能得到很大的提高(取决于需要多少开销来创建原始页面输出 发送缓存的输出总是很快 并且比较稳定)
cha138/Article/program/net/201311/15383相关参考
知识大全 ASP.NET入门教程 5.3 样式和布局的最佳实践
ASP.NET入门教程5.3样式和布局的最佳实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n
关于SOA的五种资产重用最佳实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 结合自顶向下和由
Struts开发的最佳实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文向您讲解了如何使用
ADO.NET的最佳实践技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 简介 本文为您提供
Java升级篇:ANT十五大最佳实践详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Ant
进入Harmony世界,类库开发最佳实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 年月日
JavaFlex对象透明映射最佳实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在我之前的两
最佳实践ADO.NET实用经验无保留曝光 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
将Flex集成到JavaEE应用程序的最佳实践 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 传
目标管理是以目标为导向,以人为中心,以成果为标准,而使组织和个人取得最佳业绩的现代管理方法,最早将目标管理理论应用于管理
目标管理是以目标为导向,以人为中心,以成果为标准,而使组织和个人取得最佳业绩的现代管理方法,最早将目标管理理论应用于管理实践的国家是_____。A、美国B、中国C、法国D、日本答案:D