缓存类的实现(C#)

小弟最近在编写一个O/RM组件(当然功能还是相当少的)。
大家都应该清楚把实体对象更新到数据库必须经过一系列的转换;特别是SQL语句的生成是比较费资源的,因为中间处里的东西实大是太多了。
在设计的过程中我就想如果一个对象插入数据库后把相应的Command保存在缓存中;下一次同一个类型的对象做这个操作时检测一下缓存如果有就直接拿来用这样效率应该会高些。
抱着这种想法就开始设计了(不过心里还是上上下下的,毕竟第一次尝试)。
因为缓存中的对象处理比较复杂点,在多线程中存在共享的问题,如果两个线程同时调用同一个Command这样一定会产生处理错误的!
为了更好地控制Command对象的共享,特别为Command定义了持久化的接口。
经过一段时间的设计和编写,算有点成果吧,顺把自己做的东西共享一下。 
以下是组件测试的情况
P4 2.4 1G
SqlServer sp3  运行的代码大概如下:

Code


不开启缓存(5个线程运行时间)
00:00:05.7031250
00:00:06.8281250
00:00:05.0156250
00:00:06.6875000
00:00:06.4218750
--------------------------------------------------------
开启5个命令缓存(5个线程运行时间)
00:00:04.8906250
00:00:03.5625000
00:00:02.8750000
00:00:04.9375000
00:00:05.4843750
---------------------------------------------------------  以下是缓存类的源码

Code




 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Asp.Net] 的这些文章也感兴趣:

充分利用ASP.NET的三种缓存提高站点性能的注意方法
ASP.NET Cache
使用反射将业务对象绑定到ASP.NET窗体控件
Html元素动态添加方法
在ASP.NET中实现弹出日历
使用 ASP.NET 和 Visual Basic .NET 向浏览器写入二进制文件
圆弧边框小技巧
给Repeater的数据绑定添加智能感知
ASP.NET MVC,深入浅出IModelBinder,在Post方式下慎用HtmlHelper
VS.NET 2005 Beta2初体验(4)-Notification控件