一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度
2008-12-10 22:20
531 查看
仔细模拟一下你的数据库程序,你有没有发现在计算时(特别是多用户计算时)经常重复读取数据库数据?!这是数据库处理程序的性能的最主要的杀手。
有些人说在写程序之前应该把算法想好,使得数据记录成批地、一次性地读取。但是这实际上往往不可能,因为复杂的程序贴近逻辑流程才清晰可维护。更何况这也不能解决多用户访问的情况。最好,我们根本不用在写程序时去考虑数据是否会被重复读取从而改变程序流程,但是又能自然而然地防止重复读取数据库。当对计算过程进行优化,而又不想破坏逻辑清晰性的时候,当然就是要依靠简单的Cache —— 对象只要能够缓存几秒钟就好。
下面我这里写一个世界上最懒惰的程序员使用.net写的一个最简单的Cache,但是它往往可以让复杂的计算程序大大提高计算速度。
C# code
这就是最简单的Cache。例如:
public Class User
{
static ObjectCache Buffer=new ObjectCache();
public static GetUser(string id)
{
User ret=Buffer[id];
if(ret==null)
{
ret=读取数据库产生User对象(id);
Buffer[id]=ret;
}
return ret;
}
.....
这里,在一个Dictionary <K,T>结构字典中保存了对象的key以及对象的“弱引用”。这样,当内存不足时GC会照样去释放被缓存的对象。当我们需要将对象在几秒钟内进行缓存时,使用这个最简单的Cache很有用。
.net framework中有非常多非常多的东西需要程序员去了解,不要仅仅抱着那些空洞、不实惠的“放之四海而皆准”的大部头的著作,有时间要多读一些实际地分析 .net framework 系统本身的方面的资料。在每一个技术中都可以找对一两个细节,这个细节就像掌握DNA技术一样能够让你不但扩展原理而且通过动手能力得到巨大实惠。
有些人说在写程序之前应该把算法想好,使得数据记录成批地、一次性地读取。但是这实际上往往不可能,因为复杂的程序贴近逻辑流程才清晰可维护。更何况这也不能解决多用户访问的情况。最好,我们根本不用在写程序时去考虑数据是否会被重复读取从而改变程序流程,但是又能自然而然地防止重复读取数据库。当对计算过程进行优化,而又不想破坏逻辑清晰性的时候,当然就是要依靠简单的Cache —— 对象只要能够缓存几秒钟就好。
下面我这里写一个世界上最懒惰的程序员使用.net写的一个最简单的Cache,但是它往往可以让复杂的计算程序大大提高计算速度。
C# code
using System; using System.Collections.Generic; namespace DomainBase { public class ObjectCache { //Dictionary<K,T> 会自动维护一个空链表来保存不用的单元。 //这里,使用被缓存对象的“弱引用”,允许这些对象被垃圾回收。 private Dictionary<string, WeakReference> Buffer = new Dictionary<string, WeakReference>(); public object this[string key] { get { WeakReference ret; if (Buffer.TryGetValue(key, out ret) && ret.IsAlive) return ret.Target; else return null; } set { WeakReference ret; if (Buffer.TryGetValue(key, out ret)) ret.Target = value; else Buffer.Add(key, new WeakReference(value)); } } public void Remove(string key) { Buffer.Remove(key); } } }
这就是最简单的Cache。例如:
public Class User
{
static ObjectCache Buffer=new ObjectCache();
public static GetUser(string id)
{
User ret=Buffer[id];
if(ret==null)
{
ret=读取数据库产生User对象(id);
Buffer[id]=ret;
}
return ret;
}
.....
这里,在一个Dictionary <K,T>结构字典中保存了对象的key以及对象的“弱引用”。这样,当内存不足时GC会照样去释放被缓存的对象。当我们需要将对象在几秒钟内进行缓存时,使用这个最简单的Cache很有用。
.net framework中有非常多非常多的东西需要程序员去了解,不要仅仅抱着那些空洞、不实惠的“放之四海而皆准”的大部头的著作,有时间要多读一些实际地分析 .net framework 系统本身的方面的资料。在每一个技术中都可以找对一两个细节,这个细节就像掌握DNA技术一样能够让你不但扩展原理而且通过动手能力得到巨大实惠。
相关文章推荐
- 一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度
- 一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度
- 一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度
- 一个世界上最懒惰的程序员写的Cache也能让你的复杂计算程序(数据库程序)大大提高速度(转)
- Cache也能让你的复杂计算程序(数据库程序)大大提高速度
- 上周给一个网友优化程序,修改了他的数据库结构,使速度提高了20%。
- 如何利用VS的代码优化和openmp并行计算提高程序运行速度
- 在一个大DataTable的基础上去除重复数据,分别创建2个小DataTable,省去多次数据库连接,提高效率,加快程序运行
- ASP.NET缓存Cache的应用-提高数据库读取速度
- ASP.NET状缓存Cache的应用-提高数据库读取速度
- ASP.NET缓存Cache的应用-提高数据库读取速度
- ASP.NET缓存Cache的应用-提高数据库读取速度
- mysql在数据库表中,使用索引可以大大提高查询速度
- CSDN博客:对于一个程序员,写程序就是实现功能,遇到具体问题,解决这个问题,并记录问题到CSDN上,从而有所提高和互相帮助。
- 原创:一个相当有用的宏(for vs.net),该宏能大大的提高开发速度
- ASP.NET缓存Cache的应用-提高数据库读取速度
- ASP.NET状缓存Cache的应用-提高数据库读取速度
- 利用VS的代码优化和openmp并行计算提高程序运行速度
- 使smarty模板速度大大提高的功能(缓存cache)
- 3.5 编写一个程序,从标准输入读入某职员的工作时间(以小时计)和每小时的工资 数,计算并输出他的工资。若职员月工作时间超过 40 小时,则超过部分按原工资的 1.5 倍 来计算。