惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队
Y
Y Combinator Blog
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
M
MIT News - Artificial intelligence
博客园 - Franky
V
Visual Studio Blog
I
InfoQ
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
博客园 - 司徒正美
L
LangChain Blog

博客园 - charleschen

System.Web.Hosting.HostingEnvironmentException: Failed to access IIS metabas 伤别离[转] --为了文渊阁的朋友们 和我们过去的青春 开始稳定,准备补文章 现有Java开源BI前端框架简介 使用Logview4net观察各种日志类文件 阅读的乐趣 我们是否需要ORM(3)--上帝说 我们是否需要ORM(3)--ORM优势和缺点, ORM为何而生,ORM与DB Helper Library 悬赏!!!VS2005的Bug还是什么别的东东 我们是否需要ORM(2)--ORM的不足 我们是否需要ORM(1)--前篇 写在"大型软件开发与ORM构架"之后----大型软件开发与企业级应用软件开发名份之争 大型软件开发与ORM构架 回归命令行 SQLServer的命令行工具们(2) – sqlcmd.exe(中篇) 受不了要吐鸟。。。。 回归命令行 SQLServer的命令行工具们(2) – sqlcmd.exe(上篇) 回归命令行 SQLServer的命令行工具们(1) --dta.exe 程序员喝酒喝出的计算机文化 使用ADO.NET2.0提升数据交互性能(5)
缓存!缓存!缓存!!!(一)
charleschen · 2007-02-27 · via 博客园 - charleschen

前言

        相信大多数开发人员都比较了解缓存了,很多开发人员都在软件开发中使用了预定义或自定义的缓存,并从中获得了预期的应用程序的性能提升.这篇和后续文章将详细的介绍与探讨.net体系下的缓存实现的机制,并讨论它的优点与缺点.

 使用缓存的实际价值:
       kevinhoffmanlonnykruger的书中写到:开发人员经常需要将数据(临时数据)临时存放到一个存储媒体以便快速访问.这种临时数据的存储器叫做缓存.如果开发人员合理使用缓存,则可以大幅度提高应用程序的性能.

        上面是一段完美的关于缓存的定义,就目前而言,迅速而便捷的将数据提供给核心处理代码已成为一个重要的设计要求。,迅速是为了增强用户体验,便捷可以降低系统压力。而缓存则可以完成任务,虽然不是那么完美。

 形形色色的缓存机制几乎都有以下一些主要共同点:
       1.提供数据临时存储,缓存数据是否存在具有不确定性。
       2.可以设定缓存优先级。
       3.可以制定缓存依赖,依赖过期则缓存数据不可用。 
       4.缓存的核心是MAP

 

关于缓存的一些讨论:

临时缓存VS持久缓存:
       其实从理论上说微软.net的缓存解决方案是最完美的缓存的实现,但是正因为其教科书式的实现使得不少程序员们抱怨个不停。一个可能存在的悖论是:千辛万苦获得的数据被塞进缓存,因为系统内存紧张而被放弃,虽然它是为了缓解压力而来。这并不是微软的问题,而是程序员们贪得无厌的胃口和不当的使用方式所致。
      在很多的开源缓存机制中都采用的持久缓存的方法来实现,其实这些与其说是缓存,我觉得更像是一个增强的session,将缓存的优先级,缓存依赖机制安装在其上。开发起来既简单又轻松(.net cache 牵涉了大量底层非托管代码)。

内容缓存VS数据缓存:
  内容缓存不是唯一的选择,数据缓存也不是没有优点。虽然性能上稍有不足,但是把数据存放在数据库中却省去了清理缓存的麻烦,。另一个显而易见的优点是易于负载分配,尤其是我们拥有一个怪兽数据库服务器时。从实现技术上来说,麻烦的多线程问题也可以方便的转嫁。在选择实现内容缓存还是数据缓存,有很多不得不考虑的因素,花落谁家就看所开发的程序所特殊要求了.

值得重视的依赖:
          .net framework给我们提供了常用的几个缓存依赖:时间,文件,数据库。但是由于微软一贯的作分,我们无法创建新类型的依赖(SqlCacheDependency功能何其何其之弱…)。企业库自定义依赖是个好主意,我们只需要继承ICacheItemExpiration接口即可!虽然我依然被依赖的生存周期和清理折腾的焦头烂额。