永发信息网

在ASP.NET中为什么使用Linq后无法使用数据库缓存依赖呢?

答案:1  悬赏:80  手机版
解决时间 2021-05-09 02:21
最新在做ASP.NET项目,用到SqlServer数据库缓存依赖,以及Linq to Sql,项目框架与微软开源项目PetShop很相似,MVC三层模式。我用的是SqlServer2005以及VS2008,用到数据库缓存依赖时,分层不能实现缓存依赖,当我将缓存依赖代码和数据库访问层代码写到页面层时就可以正常的使用数据库缓存依赖了(我用的Linq),但是一旦我将数据库访问层分开时,数据库缓存依赖就不可用了,没有效果了,之前我用ADO.NET连接数据库时,分层也可以实现。但是用Linq to Sql时就没效果了,这是什么原因啊,高手帮帮忙……
最佳答案
1. ASP.NET缓存 尽早缓存;经常缓存您应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI 或输出层添加缓存支持。内存现在非常便宜 — 因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高。缓存可以掩盖许多过失缓存是一种无需大量时间和分析就可以获得“足够良好的”性能的方法。这里再次强调,内存现在非常便宜,因此,如果您能通过将输出缓存 30 秒,而不是花上一整天甚至一周的时间尝试优化代码或数据库就可以获得所需的性能,您肯定会选择缓存解决方案(假设可以接受 30 秒的旧数据)。缓存正是那些利用 20% 付出获得 80% 回报的特性之一,因此,要提高性能,应该首先想到缓存。不过,如果设计很糟糕,最终却有可能带来不良的后果,因此,您当然也应该尽量正确地设计应用程序。但如果您只是需要立即获得足够高的性能,缓存就是您的最佳选择,您可以在以后有时间的时候再尽快重新设计应用程序。页面级输出缓存作为最简单的缓存形式,输出缓存只是在内存中保留为响应请求而发送的 HTML 的副本。其后再有请求时将提供缓存的输出,直到缓存到期,这样,性能有可能得到很大的提高(取决于需要多少开销来创建原始页面输出 - 发送缓存的输出总是很快,并且比较稳定)。实现要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。<%@ OutputCache Duration="60" VaryByParam="*" %>如同其他页面指令一样,该指令应该出现在 ASPX 页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。  Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。  Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server 或 ServerAndClient。  VaryByParam 必需属性。Request 中变量的名称,这些变量名应该产生单独的缓存条目。"none" 表示没有变动。"*" 可用于为每个不同的变量数组创建新的缓存条目。变量之间用 ";" 进行分隔。 VaryByHeader 基于指定的标头中的变动改变缓存条目。VaryByCustom 允许在 global.asax 中指定自定义变动(例如,"Browser")。 利用必需的 Duration 和 VaryByParam 选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于 categoryID 和页变量查看目录页,您可以用参数值为 "categoryID;page" 的 VaryByParam 将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是 3600 秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其第一个请求算起将维持一个小时。  VaryByHeader 和 VaryByCustom 主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个 URL 可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。或者,页面有可能已经针对 IE 进行了优化,但需要能针对 Netscape 或 Opera 完全降低优化(而不仅仅是破坏页面)。后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例:  示例:VaryByCustom 用于支持浏览器自定义 为了使每个浏览器都具有单独的缓存条目,VaryByCustom 的值可以设置为 "browser"。此功能已经内置在缓存模块中,并且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser" %>片段缓存,用户控件输出缓存 缓存整个页面通常并不可行,因为页面的某些部分是针对用户定制的。不过,页面的其他部分是整个应用程序共有的。这些部分最适合使用片段缓存和用户控件进行缓存。菜单和其他布局元素,尤其是那些从数据源动态生成的元素,也应该用这种方法进行缓存。如果需要,可以将缓存的控件配置为基于对其控件(或其他属性)的更
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎样才能控制自己脾气?
湖山村地址在哪,我要去那里办事
谁给我个无忧的序列号
lol,若风的卡牌和比赛中的卡牌 都带什么召唤
矢野浩二上鲁豫有约是哪一期
谁能告诉我可以下3gp格式的麦迪扣篮视频的网
这种情况用什么牌子的化妆品比较好?
中国有哪些古典名著(至少20个)
砝码不够用借用砝码的操作,为什么是错的,这
有什么办法能把手术后的疤淡化!甚至恢复以前
50级漫游刷图穿什么装备好
百合营小区A幢-2单元我想知道这个在什么地方
朋友圈的微信怎么删除,微信 别人回复的朋友圈
想找一个适合的城市
如果你喜欢的人欠了别人的钱,你会怎么办
推荐资讯
急需50篇运动会广播稿!!!!
为什么空间里今天的访问人只有一个,但下面的
怎么制作图片?
满贯单打冠军最多的女子网球运动员是谁,她夺
父母不同意的婚姻会幸福吗?
想买块1000人民币左右的手表,什么品牌的好?
喝什么农药死的最快,酒和什么溶解喝了死的快
怎样在大学里不挂科呢?
双人打怪闯关小游戏
有谁柏美保湿霜效果怎么样啊?
神舟a550 i7怎么样
我都头发烫了几次,发质挺干的,谁能告诉我用
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?