`

手把手教你写ORM(七)

阅读更多
恕我卖个关子,如何得到Attribute的问题先放一放,肯定通过反射,有兴趣的也可以自己研究研究
今天先来说缓存的问题,对于数据缓存就我自己来说经历过很多次的反复,不过在.NET社区很多人都支持按需读取的原则,不过我觉的这是个误区,在单击程序的时候由于个人电脑的内存比较小和多用途性,很多程序都强调尽量少占用内存。不过在写服务程序的时候就是一个误区了,把常用数据缓存起来,在需要的时候快速调用才是提高性能的法宝,现在个人电脑的内存都按G算的年代,如何合理充分利用内存才是正途。
所以我们决定要在我们的demo orm中实现一个缓存,缓存什么呢?,insert语句的执行结果显然是不用了,我们只需要缓存每一次select的结果。并且由于.NET的Cache对象的局限性(只能在Web用),我们只有自己来实现一个。
其实设计上并不困难,我们之前在对配置的处理上其实已经用到了缓存的,我们只需要对其作一下修改,首先基础结构还是静态的HashTable,不过需要先确定以下用什么做Key,value好说,HashTable的Value就是个object,所以存个IList也行,int也行,一个对象也行,所以对于Select的结果来说还是很合适的。
主要就是确定Key的问题
我们这里确定一个前提就是,数据如果不变的情况下,那么如果Sql语句一样的话,select的结果应该都是一样的,那么我们直接用Sql语句来做Key。但是有的SQl是带变量的,比如select XX from TT where ID=@ID,
这个时候我们把Sql处理处理,用值把@ID Replace掉就行了:}

但是还有一个问题,如果有表被Insert了数据,或者update了数据,或者Delete了数据,那么之后Select出来的不就变了?确实,所以我们在做了这些操作后就要判断哪些缓存项是需要刷新的了。这个时候我们需要Key里面包含表的信息,虽然可以直接分析Sql获取,不过加大了成本,所以我们在生成Key的时候就把这条SQL涉及的表用[Tablename]的方式加在Key的最前面。

最后我们来看看代码:
namespace Alexander.Xbase.Xcache
{
    
public class ObjCache
    
{
        
private static SortedList<stringobject> data = new SortedList<stringobject>();

        
public static void Insert(string Key, object dat)
        
{
            data.Add(Key, dat);
        }

        
public static SortedList<stringobject> GetObject
        
{
            
get
            
{
                
return data;
            }

        }

        
public static void Flash(string Classname)
        
{
            ArrayList removelist 
= new ArrayList();
            
for (int i = 0; i < data.Count; i++)
            
{
                
if (data.Keys[i].StartsWith(Classname))
                
{
                    removelist.Add(data.Keys[i]);
                }

            }

            
foreach (object o in removelist)
            
{
                data.Remove(o.ToString());
            }

        }

    }

}

说了半天其实代码也不多,有的时候觉得很复杂的其实就这么简单。
不过这种Cache比较局限的就是可能Cache冗余的数据

to be continue......
分享到:
评论

相关推荐

    手写ORM框架笔记.txt

    手写ORM框架笔记

    手写orm

    NULL 博文链接:https://fangyong2006.iteye.com/blog/746016

    手写ORM框架.java

    博文资源

    一个简单的JavaORM框架寂寞消遣之作可供学习参考只有几百行代码。

    一个简单的Java ORM框架,如果你是新手,对MVC框架的实现感兴趣的话,可以看看,一共也就几个类非常简单。

    自己写的orm辅助类

    自己写的orm辅助类 .定义实体的特性(如对应的表名 主键名 属性对应的列名 实体和数据库对象的相互转换 简单实体的 CRUD操作 QQ交流群60168829 欢迎C# ASP.NET 和SQL新手 老手 高手加入 谢谢

    自己写的ORM

    自己写的ORM,看看大家给几分

    手写ORM框架

    这是一个手写的ORM框架,类似于Mybaties框架,可以对数据库进行建表、增、删、查、改操作,每个功能都重载了多种方法,以满足用户需求。此外,还有缓存功能,第二次进行同样的查找操作时将不会调用数据库,而是在...

    Java8应用封装,手写ORM,LOG,framework

    ##公用资源 ###敏捷第一,提供丰富语法糖,方法化,片段化 #####手写容器 #####手写ORM #####手写Log #####自动化配置 #####常用工具类 #####大量回调处理

    Python 手写ORM-我的一个数据库访问工具

    ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和...

    自写的access orm框架

    自己写的操作ACCESS 数据库的orm框架,支持添加、修改、删除、分页查询等,方便快捷

    .NET ORM架构源码

    基于ORM模式开发的.NET框架,可在框架内自由添加想要的功能

    手写简易版ORM框架(仿mybatis)

    自己手写的一个半自动框架,里面有运行例子,部分代码从mybatis中抽出

    自己动手写轻量级ORM(C#)

    最近在看反射,突然想写一个ORM工具,要轻量级的,不要配置文档,先不管效率,就是一个小工具,在项目初期方便挂数据库。 我的目标就是在数据库中建个表,在项目中写个模型,然后用上这个ORM工具,就能实现数据库的...

    ORM框架ORM框架ORM框架ORM框架

    能实现基本的数据库操作能实现基本的数据库操作

    Flunet ORM 教程3

    轻量级.Net ORM FluentData教程,分为三个压缩包,下载时请注意! 1fluentdata ORM .7z 2fluentdata ORM.7z 3fluentdata ORM.7z

    Flunet ORM 教程2

    轻量级.Net ORM FluentData教程,分为三个压缩包,下载时请注意! 1fluentdata ORM .7z 2fluentdata ORM.7z 3fluentdata ORM.7z

    一个自己写的ORM原理的映射实例

    一个自己写的ORM映射实例,他是ORM映射的彻底的底层实现,真正的ORM映射的原理

    c# DB操作ORM框架

    .NET ORM框架,基于Dapper效率高,包括根据条件Update,Delete有修改字段,各种单表查寻,操作简单。 支持分库,简单分页,暂不支持分表(想办法支持中,有头续的可以联系)。联系:else-love@qq.com

    自个写的.NET ORM带例子VS2010

    自个写的.NET ORM带例子VS2010

    ORM思想的深入学习ORM.zip

    这里面包括了Hibernate和MyBatis的实现ORM思想的原理,以及讲解了什么是ORM思想。仿照Hibernate自定义了一个简单的增删改查的ORM框架,还有测试代码。

Global site tag (gtag.js) - Google Analytics