C#编程中关于数据缓存的经验总结

摘要:
C#编程中数据缓存的经验一直都是总结出来的。我发现程序的运行速度并不理想。通过检查代码,发现程序非常频繁地访问数据库,并且检索的数据量相对较大。我已经尝试了五种方法来在C#中缓存数据。详情如下:(如果有遗漏和错误,请更正并提出建议。这会导致用户无法获得最新数据的问题。
C#编程中关于数据缓存的经验总结

一直以来,我都发现程序的运行速度不够理想。通过查代码,发现程序对数据库的访问非常频繁,而且检索出来的数据量比较大。为了让程序运行快起来,我想对程序采用适当的缓存方法。
我在C#尝试了5种方法进行数据缓存,具体如下:
(如有遗漏,错误欢迎大家指正,欢迎提建议。)
1:Session方法:此方法是针对于每个用户来的,如果用户量比较大,那么建议不要采用此方法,否则会大量耗尽服务器资源。
2:Cache方法:
    2.1:对于每个用户来说访问的数据最好是一致的,否则要用不同的key标识不同的缓存。 (要缓存的数据至少也是按用户类型来分的,如果每个用户可以按条件检索得到不同的数据的话,即使不造成数据混乱, 估计也跟session没什么区别了,用户很多的话太耗服务器资源)。
     2.2:如果每个用户得到的数据都不同,而且用户数量较多,应该考虑往客户端存了。
    2.3:需要考虑当生成缓存后,如果数据库中的数据发生变化了。而造成用户得不到最新的数据的问题。(可参考:"数据库缓存相关性"的文章)
3:往客户端写文件
首先A页面在运行的时候,从数据库中取到了数据集,在显示出数据报表的同时,A页面将数据集转化为xml文件,写入客户端。客户如果要打印该报表,那么程序就从客户端取存入的xml文件,如果xml文件存在,就从中读取数据并显示成打印报表显示出来。如果xml文件不存在,就提示重新检索数据。
例如:
<script type=text/javascript>  //给客户机上写文件
    function ws()
    {
       var fso,ctf;
       fso = new ActiveXObject("Scripting.FileSystemObject"); //IE的安全设置里面需要把没有标记为安全的ActiveX控件和脚本设置
        为“启用”,才不会提示。
       ctf = fso.CreateTextFile("c:\\luiTestfile.txt",true);//true为可以覆盖原有文件      
       ctf.Write("write content in file");
       ctf.Close();       
    }
</script>
但是,每次操作客户端的文件,系统都会提示是否运行没有标识的ActiveX控件,用户点否就不能成功保存文件了。
4:用cookie来存储
--------------------写cookie----------------------------------------
HttpCookie myCookie = new HttpCookie("DateCookie_lui");//DateCookie_lui为要创建的cookie键值对的键名。
DateTime now = DateTime.Now;
myCookie.Value = now.ToString();//给此cookie赋值
myCookie.Expires = now.AddMinutes(1);//设置cookie的过期日期和时间(此为1分钟后过期),在客户再次访问服务 器同时附带cookie文件,如其中以这个名字的cookie过期,就会自动清除它。
this.Response.SetCookie(myCookie);//将此cookie写入客户端
--------------------读cookie----------------------------------------
HttpCookie myCookie = new HttpCookie("myTestCookie_lui");//创建一个cookie操作对象
myCookie = Request.Cookies["DateCookie_lui"];//得到客户端传来的cookie数据,DateCookie_lui为要取的cookie键值对的键名
if(myCookie != null)
Response.Write(" Cookie Name is:"+myCookie.Name+". Cookie Value is:"+myCookie.Value);
else
Response.Write(" Not found!");
用cookie的方法存储数据,经过我反复尝试发现cookie存储值的大小被限定,(每项仅可存汉字仅1686个,字母或数字仅5059个),且cookie文件的大小一旦超过大小(20kb左右)就会导致找不到页面的错误,且每个cookie文件中只能存20项键值对。
5:尝试在A页面把dataset转化为xml字符串,隐藏于页面中,post提交到B页面;在B页面取到该xml字符串,然后将xml字符串转化为dataset,生成报表。
将dataset转化为xml的字符串:
 vDataXmlStr=ds.GetXml();//得到数据集的xml字符串
 this.hidXmlStr.Value=vDataXmlStr;//存入页面的隐藏元素中
------------------------------------------------------------------------
将xml字符串转化为dataset:
 vXmlStr = Request.Form["hidXmlStr"].ToString();//取xml字符串的变量值
 System.IO.StringReader vSR = new System.IO.StringReader(vXmlStr);//读取字符串
 ds.ReadXml(vSR);//将xml读入dataset中
------------------------------------------------------------
页面中如果字体变成乱码:要设置该页面的<%@ Page responseEncoding="gb2312"%>

免责声明:文章转载自《C#编程中关于数据缓存的经验总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[SVN] 分支同步、合入主干操作分享RTMP协议推流流媒体服务器/视频直播/点播平台EasyDSS获取直播列表接口(/live/list)详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

hibernate必须知道的知识

Hibernate经典知识:   1、Hibernate工作原理及为什么要用?     1.       答:hibernate,通过对jdbc进行封装,对 java类和关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作. 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 hibernate的性能非常好...

【postman】postman访问后端的post接口,设置Cookie的记录,设置Pre-request Script

postman访问后端的post接口,设置Cookie的记录,设置Pre-request Script 设置示例: pm.request.headers.add({ key: 'Cookie', value: 'ticket=CD7933EA05CC76573068CBC182D57DB907955093D8A2133B60BB3ECB48...

关于缓存的一些重要概念(Redis 前置菜)

1. 缓存的基本思想 很多朋友,只知道缓存可以提高系统性能以及减少请求相应时间,但是,不太清楚缓存的本质思想是什么。 缓存的基本思想其实很简单,就是我们非常熟悉的空间换时间。不要把缓存想的太高大上,虽然,它的确对系统的性能提升的性价比非常高。 其实,我们在学习使用缓存的时候,你会发现缓存的思想实际在操作系统或者其他地方都被大量用到。 比如CPU Cache...

MyBatis开发--&amp;gt;接口方式编程

从本篇开始,引用借鉴博客:http://blog.csdn.net/techbirds_bao/article/details/9233599,里面是经典教程,但是有些纰漏。自己整理下,更加适合自己学习。 在前一篇入门篇我们使用的是SqlSession来执行查询语句: User user = session.selectOne("User.selectUs...

验证码实现原理

最简单的验证码   极验验证   扫码登录   12306验证码 先说结论吧 仔细了解了一番后,发现,其实 验证码 ,还是基于session原理 或者token原理 什么是session 这里推荐一本书《图解http》,里面讲解的很清楚。如果只是想简单的了解一下session,可以看看这个文章。 什么是token token是另一种使用较多的鉴权方式,具...

三把利器快速制作代码帮助文档

1、前言相信不少麻油都已经积累了属于自己的代码库了,不知道是否有过这样的经历: A:听说你上次写了个通用XXX类库啊,我正好要用到,麻烦把dll发我一下。 B:好的,你等一下,我发给你。。。 。。。十分钟后 A:喂,你这个类是怎么用的啊,有没有帮助文档啊。 B:汗,没来得及做,我来和你说吧。。。 一个好用的类库,如果能配上一个好的说明文档(最好还带搜索功能...