菜单

[转]C#基础回顾:Asp.net 缓存

2018年9月12日 - 注册免费送38元体验金

正文转自http://www.cnblogs.com/stg609/archive/2009/03/22/1418992.html

 缓存的意
     
你进电脑的时光,是否会见在意CPU的二级缓存?是未是梦想二级缓存能够大点?那你生没发生想了您为何会时有发生这种想法?说到底,就是为性问题,如果缓存大点,那即便代表我们处理多少的响应速度会重复快。这便好于我们查阅字典,如果产生一个单词,你待明白它的意,你是免是急需查阅字典,查找目录,翻至指定的页,找到你而之单词,这才会赢得该词的分解?可是不幸的凡,你并没有感念要失去记住这词,当次糟糕相遇这词的时刻,你是不是同时得又相同普上述的动作?如果你就挥之不去这单词,那是匪是立即就能亮此词之意了?这是免是老大便捷?
      缓存的缺陷      
如果被你以一个信息无法转达的地方(比如原始森林)呆上几乎单月,而及时几乎独月被,发生了许多弯,其中某就是是公上次查询的杀单词由于一些特殊之因,它的说明为转换了。而你明显不明了者事情,如果手上,让您讲是单词,你是休是碰头有笑话?这是啊由吧?很简单,因为您的脑际里就保留在上次之解释,而没有立即获得更新。

      登正题(本人没有深入钻研,如发不足之处,希望大家不吝赐教)

      示例1:      
你期望不指望你的动态网站也来一个可记的大脑?可能某些朋友见面觉得好笑,“这起必不可少吗?”
。如果您的网站牵涉到大气之数量交互,而这些多少为更新的频率又休是大高,比如小提供新闻资讯的站点,可能就一味需要以上午9:00面前对情报拓展翻新,而后就未需要再次变更了。那也就是说9点后用户访问所收获的多少都是一模一样的。但是,因为尚未供缓存的力量,用户之历次访,仍旧会促成服务器端对数据库的顾,这会不见面那个影响属性?
      在Asp.net
webform中得透过安排页面指令OutputCache来实现力量。在您的aspx文件之头在如下的话语:

<%@ OutputCache Duration=”10″ VaryByParam=”none”%>

      上述重大发生少数只特性(要部署缓存至少需立即有限只特性):
     
Duration用来定义页面被缓存的时空(单位吗秒),也就是说在10秒内,重复访这页面将取得完全一致的数额。
     
VaryByParam代表是否因接受请求的参数(xxx.aspx?id=1)而改变,如果安为none,表示未移。
      这样,一个极端简单易行的苏存效果就算可以实现了。

      **示例2:
**     
通过上面的例子,相信您早就亮到了缓存的魅力。但是,上面的力量无法根据页面的参数进行缓存,也就是说不管我传什么参数为页面,显示的且是同样的。比如自己当10秒内次访问xxx.aspx?id=1与xxx.aspx?id=2,其形的功力是一模一样的。如果指望根据参数进行缓存,只要被VaryByParam=”id”就可以了(大小写无关)。这样即便见面冲id的价不同而个别缓存,相当给缓存了页的差不多单不等之本子。

      示例3:      
如果要有些未深受缓存,可以以劳务器端控件Substitution。操作特别粗略,只需要以该控件拖动到页面上,然后设置一下内的MethodName属性就得了。
     
该控件编译成Html后,不牵动任何标志,就如同是一个占用位符。其中显示的凡内容是由MethodName所指定的点子。但是该方法来必然的限制:
      1:静态方法。
      2:只领HttpContext 类型的参数。
      3:必须回到 string 类型的价。
      如:

public static string GetCurrentTime(HttpContext context)
{
    return DateTime.Now.ToString();
}

      这样,每次页面刷新后哪怕得取当前底流年,而其他数据则是于缓存的。

      示例4:      
是无是看通过这种方式落实的局部缓存、部分刷新的效应来许多受制。如果需要同种更灵敏的办法来落实有缓存的作用,可以经过用户控件来贯彻。就是说,我们以需要被缓存的多寡单独放于一个页面被,然后以拖欠页面上按我们前几单例证所介绍的主意进行设置。最后把装好之用户控件拖动到终极之页面上就是足以了。另外,OutputCache指令中还有一个Shared属性,设置该属性为true就意味着共享该控件的输出缓存。

<%@ OutputCache Duration=”10″ VaryByParam=”CategoryiD” Shared=”true”%>

 

      示例5:
     
ASP.NET还提供了相同种更有益的点子,可以针对页面的变量进行缓存。即利用Cache对象。一般用来缓存数据变量,如DataSet。但是,如果数据量比较好之讲话,建议与硬盘缓存结合起来使用。一般用Cache对象来保存数据库数据好于下OutputCache配置性能更好。但是太不用就此Cache来存放用户之登陆信息等等,因为缓存中的数额随时都发生或为替换出内存(如果您控制有关于电脑组成方面的规律,可能会见还好掌握)。

注册免费送38元体验金 1
//从Cache对象吃获相应的dataset
DataSet ds = (DataSet)Cache[“data”];

//判断dataset是否为空,如果为空,说明没有当缓存中。
if (ds == null)
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings[“NorthwindConnectionString”].ConnectionString);
    conn.Open();
    SqlCommand cmd = new SqlCommand(“select * from products where CategoryID = 1”, conn);
    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    ds = new DataSet();
    sda.Fill(ds);
    Cache[“data”] = ds;//将dataset插入到Cache对象中
}

GridView1.DataSource = ds;
GridView1.DataBind();

      示例6:
     
但是地方方式毕竟起接触不足,如果当数变动之早晚即便自动更新缓存,那非是再次好。这好有个别种植实现方式,通知以及轮询。但是MSDN上介绍“通知”的意义只有在Microsoft
SQL Server 2005 的完好版本,即非速成 (non-Express)
版中才有供。而另版本则仅仅供了轮询方式,况且我哉单独会轮询方式,所以就是来大概介绍下该办法吧。

     
要动用轮询方式,需安排数据库,配置的要紧职责便是于数据库中成立平等张表和局部触发器,在是表中存放的凡咱们得轮询的数量库表对象及其有关消息,触发器自然是因此来当所监视的申发生变化的时段实施了。幸好,这同一名目繁多操作我们才需要用几句子简单的吩咐就得缓解了。否则的话,我或就是会停顿了。
      打开Vsiual studio的一声令下提示窗口,输入:
      aspnet_regsql.exe -S <Server> -U <Username> -P
<Password> -ed -d <Database> -et -t <TableName>
      如:aspnet_regsql.exe -S .\msserver -U sa -P sa -ed -d Northwind
-et -t products
      如果运行成功,会唤醒:

啊 SQL 缓存依赖项启用该数据库。
.
已完成。
呢 SQL 缓存依赖项启用该表。

     
然后,设置以及SqlDependency相关的一对信(如,轮询时间),这些信在web.config中开展设置:

注册免费送38元体验金 2
<caching>
  <sqlCacheDependency enabled = “true” pollTime = “1000” >
    <databases>
      <add name=”Northwind” 
         connectionStringName=”NorthwindConnectionString”
         pollTime = “1000” />
    </databases>
  </sqlCacheDependency>
</caching>

     
其中的name只要求是一个有利于记忆的名字(一般就是记作数据库的名号),pollTime即凡是轮询时间(单位:毫秒)。
      [援MSDN中的一致段子话:小的 pollTime
值虽然要对数据库的呼吁次数多,但能重复快的将过时数据从缓存中排除。较充分之
pollTime
值虽然减少了针对性数据库的要次数,但净增了由后台数据变动到破相关缓存条目中的延迟时间。还吓,数据库请求单是实施一个简便的贮存过程,该存储过程只是于一个简练的笔录数少的表返回不多的几乎执。对而的应用程序试用一些两样的
pollTime
值,从中寻找有一个只是抵数据库访问与数据过时这两边的理想值。允许的绝小
pollTime 值为 500 。]
    
 connectionStringName即是<connectionStrings>节吃所安排的数据库连接名称。如:

注册免费送38元体验金 3
 <connectionStrings>
  <add name=”NorthwindConnectionString” connectionString=”Data Source=1AC425E4D0B74F1\msserver;Initial Catalog=Northwind;Integrated Security=True”
   providerName=”System.Data.SqlClient” />
 </connectionStrings>

      最后修改OutputCache指令中之Duration为”999999″用来代表最好,再进入一个性SqlDependency,设置该属的值也”database,tableName”。其中database为Web.config
中 <add> 元素的name
属性中指定的数库名。以Northwind的products表也条例就相应创作:SqlDependency=”Northwind:products”。如果发点儿摆放表就编写:database:tableName;database2:tableName2。

      如果所有安排了,就可以看效果了。你见面发现只有当数给更新的时候,才会更新缓存。这个功效明显比前几种植艺术来得重复好,但是呢非克通的利用这种办法,毕竟轮询还是会负出一些代价的。
     
[流淌,上述配置过程遭到所干到的有数据库名称、表名称,大小写得要是前后一致,否则恐怕会见编译失败。]

      以身作则打包下载 

      参考:
      1.苏鹏先生说话的“asp.net2.0缓存与性能”
      2.vs2005入门 之 Substitution
[视频]
      3.Asp.net
缓存技术总结
      4.用 ASP.NET 输出缓存与 SQL Server
结合使用.aspx)
      5.运用 SQL
缓存依赖项

作者:stg609

正文版权归作者和博客园共有,欢迎转载,但未经作者同意要保留这个段子声明,且以篇章页面明显位置被起原文连接,否则保留追究法律责任的权。

自身博客已经转移到Charley Blog

相关文章

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图