欢迎来到天天文库
浏览记录
ID:20179451
大小:68.00 KB
页数:6页
时间:2018-10-10
《缓存类的实现(c#)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、缓存类的实现(C#)>>教育资源库小弟最近在编写一个O/RM组件(当然功能还是相当少的)。大家都应该清楚把实体对象更新到数据库必须经过一系列的转换;特别是SQL语句的生成是比较费资源的,因为中间处里的东西实大是太多了。在设计的过程中我就想如果一个对象插入数据库后把相应的mand保存在缓存中;下一次同一个类型的对象做这个操作时检测一下缓存如果有就直接拿来用这样效率应该会高些。抱着这种想法就开始设计了(不过心里还是上上下下的,毕竟第一次尝试)。因为缓存中的对象处理比较复杂点,在多线程中存在共享的问题,如果两个线程同时调用同一个mand这样一定会产生处理错误的!为了更好地控制mand对
2、象的共享,特别为mand定义了持久化的接口。经过一段时间的设计和编写,算有点成果吧,顺把自己做的东西共享一下。以下是组件测试的情况P42.41GSqlServersp3运行的代码大概如下:Entitys.Customerscustomer=neers();DateTimedt=DateTime.Noapcontainer.OpenSession()){session.Open();for(inti=0;i<2000;i++){customer.CustomerID=Guid.Neer.panyName="henry";session.Save(customer);}}tp1
3、=neeSpan(DateTime.Nomary>///数据缓存保存信息异步处理委托///</summary>delegatevoidEventSaveCache(objectkey,objectvalue);///<summary>///对象缓存类///</summary>publicclassCache{privateMappingContainermContainer;///<summary>///获取或设置当前缓存对象所在的关系映象容器///</summary>publicMappingContainerC
4、ontainer{get{returnmContainer;}set{mContainer=value;}}///<summary>///构造缓存对象///</summary>publicCache(){////TODO:在此处添加构造函数逻辑//}///<summary>///用于缓存数据的Hashtable///</summary>protectedSystem.Collections.Hashtable_Cache=ne.Collections.Hashtable();protectedObject_LockObj=nemar
5、y>///获取指定键值的对象///</summary>///<paramname="key">键值</param>///<returns>object</returns>publicvirtualobjectGetObject(objectkey){if(_Cache.ContainsKey(key))return_Cache[key];returnnull;}///<summary>///把对象按指定的键值保存到缓存中///</summary>///<paramname="key"&
6、gt;键值</param>///<paramname="value">保存的对象</param>publicvoidSaveCaech(objectkey,objectvalue){EventSaveCachesave=ne.AsyncCallback(Results),null);}privatevoidResults(IAsyncResultar){EventSaveCachefd=(EventSaveCache)((AsyncResult)ar).AsyncDelegate;fd.En123下一页>>>>这篇文章来自..,。dInvoke
7、(ar);}///<summary>///把对象按指定的键值保存到缓存中///</summary>///<paramname="key">键值</param>///<paramname="value">保存的对象</param>protectedvirtualvoidSetCache(objectkey,objectvalue){lock(_LockObj){if(!_Cache.ContainsKey(ke
此文档下载收益归作者所有