大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> 利用Cache缓存数据DataTable数据提高大数据量访问性能

利用Cache缓存数据DataTable数据提高大数据量访问性能

时间: 2021-07-31 作者:daque

弁言:在数据量不大的情景下,步调如何写基础上本能分辨不大,然而当咱们面临多如牛毛的数据的功夫,我想本能即是个不得不商量的题目了,每写一个本领,每弥补一笔数据都要商量到本能题目,要不效劳器将接受宏大的实行开支,即使效劳器本能不好大概登时就死在何处了,以是在大数据量一再考察的页面上,咱们就必需商量怎样普及页面包车型的士本能了,正文将供给一种用cache普及考察本能的本领来处置此题目,在很大水平上普及页面加载数据的本能。正文陈列的是乒坛版块中帖子列表页面加载数据的范例。正文:每个版块帖子列表消息城市对应一个cache的名字,比方,咱们不妨依照顺序设成#region -- cachename setting --boardcachename = "board" + boardid.tostring();#endregion这边咱们同样是采用数据集弥补datatable的本领创造数据的。然而,由于咱们有了cache,以是,咱们在第一次加载完数据后,会把数据压到cache中,而后历次弥补datatable进步行确定,即使cache为空时才加载,即使不为空,则不加载。private datatable builddatatable(){ // 数据缓存 体制 if(cache[boardcachename] != null) { // create datatable from cache datatable dt = (datatable)cache[boardcachename]; return dt; } else { // create datatable from database datatable dt = new datatable(); #region -- create datatable -- dt.columns.add("topicid", system.type.gettype("system.int32")); //省去N个一致字段的增添 dt.columns.add("coolstate", system.type.gettype("system.int32")); datacolumn[] keys = new datacolumn[1]; keys[0] = dt.columns[0]; dt.primarykey = keys; #endregion #region -- add datarow -- bbstopiccollection btc = new bbstopiccollection(); btc.boardid = this.boardid; btc.topicstate = 1; if(!btc.getinfo()) { return dt; } for(int i=0;i<btc.count;i++) { datarow dr = dt.newrow(); // 帖id dr["topicid"] = btc[i].id; //省去N个一致字段的数据赋值 // cool state dr["coolstate"] = btc[i].coolstate; dt.rows.add(dr); } #endregion // push datatable to cache cache[boardcachename] = dt; return dt; }}上头的代码实行了数据弥补进程,但更要害的是对数据举行处置,比方,咱们变换一条居所的某些状况位来实行少许功效,比方,咱们把贴子加成“酷贴”,这个功夫就要对cache举行操纵,更加提防一下,咱们在上头的代码中还更加树立topicid这一列动作表的主值键,如许咱们本领很快的定位到要处置的数据消息,本领如次。#region -- cache management --if(cache["board" + this.boardid.tostring()] != null){ datatable dt = (datatable)cache["board" + this.boardid.tostring()]; datarow dr = dt.rows.find(topicid); if(dr != null) { dr["coolstate"] = 1; dr.acceptchanges(); dt.acceptchanges(); }}#endregion一点证明:个中的topicid是经过那种道路传过来的你想操纵的消息的独一标识字段,acceptchanges本领革新生存相映东西数据自上一次革新此后一切的变动,其余对cache举行操纵后,牢记要从新绑定命据,其余也要同声革新数据库中的,正文觉得读者群完备对数据库数据举行操纵的本领,便不作贅述。那么咱们怎样来简略数据记载呢?咱们是否不妨径直在找到dr的那一条龙底下,用个dr.delete()来把数据简略就完事了呢?谜底能否,如许操纵会展示题目,经尝试对cache的增添和革新操纵会登时奏效,但简略某条记载的举措不会登时起效率,如许就会引导数据操纵异步性,这是不不妨的,同声1.1本子比1.0本子要略微好少许,但仍旧处置不了异步性的题目,以是咱们是否必需把cache干掉,从新弥补一下呢,即使你承诺如许做,天然也无可非议,我这边供给其余一个思绪供参考。咱们的处置计划是,在创造表格的功夫多加一个简略标记位,比方deletestate,开初从数据库中加载出来的功夫都一致为1,而后过程简略操纵此后,将这条消息的简略标记场所0(不要忘怀同声操纵数据库中的数据),而后绑定的功夫对dataview举行过滤,dv.rowfilter = "deletestate==1",便不妨模仿出简略功效了。数据过程如许的处置之后,考察本能会数以百倍的普及,数据只在cache作废后才会从新加载,用户对数据的考察都是对cache的操纵,并且cache是效劳器变量,对一切用户共享,如许,即使同声有第一百货商店个用户考察,也都是对同一个cache举行第一百货商店次考察,而步调考察cache利害常快的,即使不运用cache,那么,咱们就要去跑第一百货商店度数据库操纵,本能极差,更加是当洪量用户对洪量数据举行考察的功夫,效劳器堪称苦不胜言,以是用cache来缓和负载是十分需要且对立崇高的一种计划,不过劳累了那位在cache作废后第一次考察页面包车型的士谁人用户,然而这种丧失换来旁人的高本能也是犯得着的嘛。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.