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#编程中关于数据缓存的经验总结一直以来,》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGis Server开发Web GIS新手体验(四)两个springboot项目如何部署在同一个服务上,两个spring启动应用程序部署在同一台服务器上下篇

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

相关文章

Java程序员必备的10个大数据框架!

作者:java妞妞 blog.csdn.net/javaniuniu/article/details/71250316 当今IT开发人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语言和API越来越复杂,我们构建的应用也越来越复杂。根据外媒的一项调查报告,列出了Java程序员在过去12个月内一直使用的一些工具或框架,或许会对你有...

使用C#读写结构化的二进制文件

最近工作上遇到一个问题,就是有将近200万个CSV文件,每个CSV文件包含了成千上万条实验数据,CSV以一个不连续的整数值作为文件名,比如:1.CSV、2.CSV、3.CSV、5.CSV等等。另外又有200万个XML文件,每个XML文件的文件名与CSV的文件名一一对应,在这些XML文件中,定义了所对应的CSV实验数据文件的实验描述信息(比如实验名称、实验类...

Winform中自定义xml配置文件,并配置获取文件路径

场景 在Winform程序中,需要将一些配置项存到配置文件中,这时就需要自定义xml的配置文件格式。并在一些工具类中去获取配置文件的路径并加载其内容。 关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。 实现 首先在项目下新建文件夹,命名为config,然后右键添加xml文件。 自定义xml节点内容如下 <?xml version="1...

js设置滚动条位置

JS控制滚动条的位置: window.scrollTo(x,y); 竖向滚动条置顶(window.scrollTo(0,0); 竖向滚动条置底 window.scrollTo(0,document.body.scrollHeight); JS控制TextArea滚动条自动滚动到最下部 document.getElementById('textare...

[转]网站优化-IIS7下静态文件的优化

本文转自:http://www.cnblogs.com/Leung/archive/2009/10/26/1590256.html 在网站开发过程中,通常我们会对网站的静态文件做处事,像图片文件,CSS,JS文件,其实以前也写过类似的文章,现在只是做一个针对性的总结下. JS文件处理: 网站优化来说,其实是见议我们放在网页最后来来加载,因为JS文件它是一个...

记Git保存本地密码与删除本地缓存

参考: https://www.jianshu.com/p/77b0340a02f3 https://blog.csdn.net/yunlong782/article/details/50887833?locationNum=7&fps=1 保存密码 git有三种策略查找用户名密码:去缓存中找,去磁盘中找,去钥匙串中找。 ~/User/用户...