首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何LoadControl一个使用VaryByControl OutputCache的控件,指定属性的值

在许多情况下,使用VaryByControl属性来缓存OutputCache可能会导致性能问题。为了解决这个问题,您可以使用以下方法来更好地控制OutputCache的缓存:

  1. 使用VaryByCustom属性:

VaryByCustom属性允许您根据自定义策略来缓存OutputCache。您可以在Global.asax文件中定义自定义缓存策略,并在OutputCache指令中使用VaryByCustom属性。例如:

代码语言:csharp
复制
public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg == "user")
    {
        return context.User.Identity.Name;
    }
    return base.GetVaryByCustomString(context, arg);
}

然后在OutputCache指令中使用VaryByCustom属性:

代码语言:csharp
复制
[OutputCache(Duration = 60, VaryByParam = "none", VaryByCustom = "user")]
public ActionResult MyAction()
{
    // ...
}
  1. 使用OutputCacheLocation.Downstream属性:

OutputCacheLocation.Downstream属性允许您仅在客户端缓存响应,而不是在服务器端缓存响应。这可以减轻服务器的负担,并提高性能。例如:

代码语言:csharp
复制
[OutputCache(Duration = 60, VaryByParam = "none", Location = OutputCacheLocation.Downstream)]
public ActionResult MyAction()
{
    // ...
}
  1. 使用OutputCacheLocation.ServerAndClient属性:

OutputCacheLocation.ServerAndClient属性允许您同时在服务器端和客户端缓存响应。这可以提高性能,并减轻服务器的负担。例如:

代码语言:csharp
复制
[OutputCache(Duration = 60, VaryByParam = "none", Location = OutputCacheLocation.ServerAndClient)]
public ActionResult MyAction()
{
    // ...
}
  1. 使用OutputCacheLocation.Server属性:

OutputCacheLocation.Server属性允许您仅在服务器端缓存响应。这可以减轻服务器的负担,并提高性能。例如:

代码语言:csharp
复制
[OutputCache(Duration = 60, VaryByParam = "none", Location = OutputCacheLocation.Server)]
public ActionResult MyAction()
{
    // ...
}
  1. 使用OutputCacheLocation.None属性:

OutputCacheLocation.None属性允许您禁用OutputCache。这可以避免在某些情况下出现性能问题。例如:

代码语言:csharp
复制
[OutputCache(Duration = 60, VaryByParam = "none", Location = OutputCacheLocation.None)]
public ActionResult MyAction()
{
    // ...
}

总之,您可以使用VaryByCustom属性、OutputCacheLocation属性和其他策略来更好地控制OutputCache的缓存,从而提高性能和减轻服务器的负担。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET 缓存:方法和最佳实践

后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例: 示例: VaryByCustom 用于支持浏览器自定义 为了使每个浏览器都具有单独的缓存条目,VaryByCustom 的值可以设置为 "browser...除了 Location 属性,对于 OutputCache 在 Web 窗体上支持的所有属性,用户控件也同样支持。...用户控件还支持名为 VaryByControl 的 OutputCache 属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。...如果指定了 VaryByControl,可以省略 VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。...不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以应用 Shared="true" 参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。

1.6K20

通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行

LoadControl 和输出缓存 极少有不使用用户控件的 ASP.NET 应用程序。在出现母版页之前,开发人员使用用户控件来提取公用内容,如页眉和页脚。...以下代码加载用户控件并向 BackColor 分配一个值: protected void Page_Load(object sender, EventArgs e) { // 加载用户控件并将其添加到页面中...因此,如果开发人员调用 LoadControl 以动态加载用户控件并且为了访问控件特定的方法和属性而转换控件引用,他们必须注意进行该操作的方式,以便不管是否具有 OutputCache 指令,代码都可以运行...• 如果 ASCX 文件包括一个 OutputCache 指令并且控件的输出没有被缓存,则 LoadControl 返回一个对 PartialCachingControl 的引用,此 PartialCachingControl...• 如果 ASCX 文件包括一个 OutputCache 指令并且控件的输出被缓存,则 LoadControl 返回一个对 PartialCachingControl(其 CachedControl 属性为空

3.6K80
  • ASP.NET 缓存(3)

    片段缓存:这种情况下,你把确定要缓存的内容,包裹在一个专用的用户控件里,然后只需要对这个控件做输出缓存就行。 post-cache substitution 缓存后替换。...在这种情况下,你对动态变化的内容不进行缓存,只需要用Substitution控件替换这个动态内容就行。 这两种方式,片段缓存实现起来是最简单。然而,使用哪种方式取决于你要缓存的内容的数量。...最灵活的实现部分缓存的方法是,不用输出缓存,而是使用数据缓存在代码中程序化的处理缓存。 实现片段缓存,你只需要创建一个用户控件,设置这个用户控件的OutputCache 指令,就可以了。...上面的代码中,如果指定了OutputCache指令,则除了Response.WriteSubstitution方法不会被缓存外,其他方法都会被缓存。...ASP.net会跳过页面生命周期,这意味着它不会创建任何控件对象,或者触发控件事件。如果你的动态内容基于值或者其他控件,你可能要使用其他技术,比如数据缓存,因为这些控件不能在回调函数中使用。

    76420

    使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝

    系统中有不少这样的Model需要相互转换,有朋友推荐使用AutoMapper,试了下果然不错,解决了问题,但作为一个老鸟,决定研究下实现原理,于是动手也来山寨一个。...注意:这里只是直接复制了属性的值,对应的引用类型而言自然也只是复制了属性的引用,所以这是一个“浅表拷贝”。...现在,主要的代码都有了,因为我们缓存了执行类型对象的属性访问方法的委托,所以我们的这个“属性值拷贝程序”具有很高的效率,有关委托的效率测试,在前一篇 《使用泛型委托,构筑最快的通用属性访问器》 http...public static class ModuleCastExtension { /// /// 将当前对象的属性值复制到目标对象,使用浅表复制...补充: 经网友使用发现,需要增加一些不能拷贝的属性功能,下面我简单的改写了下原来的代码(这些代码没有包括在上面的下载中): /// /// 将源类型的属性值转换给目标类型同名的属性

    1.9K90

    反射的另类实现。(不知道这么用还算不算反射了?)

    .net里面有UserControl ,而UserControl 又可以使用 Page.LoadControl("UC_Show1.ascx") 的方式来加载。...当然 UserControl 也是可以继承的。 Page.LoadControl 的参数是字符串,那么就可以动态设置了。 于是“反射”也就实现了。...asp.net页面,里面放一个 PlaceHolder 控件,然后在Page_Load 写如下几行就ok了。...2、可以让表单更灵活的组合,更容易的实现控件级别的复用。 3、可以实现不用编译就可以修改程序。...好像大家总是想把控件和算法分离开来,但是在有些时候合在一起考虑也许会更方便。 或则即使分离出来,控件是不是也可以“享受”算法的待遇呢? 至于效率嘛,还没有测试。

    53460

    ASP.NET中的页面指示标识

    asp.net的web forms 中现在包含以下7种标识: @ Page,@ Control,@ Import,@ Registe,@ Assembly,@ OutputCache @ Page 标识我们常用的属性是...具体应用可见:ASP.NET 中文显示的两种解决方法 @ Control 并非使用在aspx文件中,而是使用在ascx文件,也就是拥护子定义控件的文件中,在一个ascx文件中只能有一个@ Control...标识 @ Import 是我们可能最常用的一个标识 ,当我们使用一些特殊的aspx特性的时候,为了告诉编译器我们的目的,我们就需要使用这个标识,常用的标识我已经在前面的文章中讲过了,如果不使用@ import..." %> src 指向的是后缀为cs 或者vb 的文件,这将使这些文件中的CLASS 被包含进当前的页面中 @ OutputCache .aspx文件的内容在服务器上保留的时间的长度(连接……) OutputCache duration=”1000” %> 这里定义的Cache 存留时间为1000秒 @ Webservice 引用一个WebService 的类。

    1.6K30

    动态加载控件

    用户控件用Loadcontrol,而普通控件则是新建对象,再加入到Controls中 2、可以加到各级容器的Controls中 3、定位通过对style的修改来完成。...通常您将动态控件添加到容器的控件集合的末尾。因此,为动态控件存储的视图状态信息成为相应容器的视图状态结构末端的附加信息,并且页可以在控件创建之前忽略它。...但是,动态创建的控件的视图状态信息将在两种情况下会出问题: 如果您在现有控件之间插入动态控件。 如果您动态插入控件,并随后在往返期间使用不同的值重新插入它们。...结果通常是出现表明存在无效强制转换的错误。 如果您在每次往返期间重新插入,则每次动态创建的控件都将从上述控件集的视图状态中选取属性值。...在很多情况下,可以通过将容器控件的 EnableViewState 属性设置为 false 来避免此问题。在本例中,将不会保存有关动态控件的任何信息,并且与后续版本的控件之间不存在任何冲突。

    2K70

    我的CMS开发记 -引子

    我今年4月份的时候,需要给公司做一个门户网站。我倒是还从来没使用过CMS系统,于是上网搜了一把,冥冥之中注定我搜到的是DotNetNuke.       ...我准备按找开发中遇到的问题的顺序把它串起来小结一下,看看通过这个项目得到了那些提高 那么,现在时光倒流,回到2008年-7月....... 如何实现控件的动态加载.      ...这是我遇到的第一个问题。DotNetNuke的强悍之处就在于,他的各个模块之间没有直接的关联,他每个模块都是作为一个用户控件,根据设置,在运行时动态地加载上去的。...动态加载控件,当然是使用LoadControl.       关键是LoadControl是在什么时候执行的。...这个问题固然是很简单啦,不过当时我还真的绕了一个弯路,特此纪念^_^       实现了动态加载控件,那么接下来就是山寨一下DotNetNuke的操作界面了,我对他的页面操作是非常满意的,所以完全山寨之

    1.1K120

    spring boot 使用ConfigurationProperties注解将配置文件中的属性值绑定到一个 Java 类中

    @ConfigurationProperties 是一个spring boot注解,用于将配置文件中的属性值绑定到一个 Java 类中。...功能介绍:属性绑定:@ConfigurationProperties 可以将配置文件中的属性值绑定到一个 Java 类中的属性上。...通过在类上添加该注解,可以指定要绑定的属性的前缀或名称,并自动将配置文件中对应的属性值赋值给类中的属性。...当配置文件中的属性值被绑定到类的属性上后,可以通过依赖注入等方式在应用程序的其他组件中直接使用这些属性值。属性验证:@ConfigurationProperties 支持属性值的验证。...可以通过在属性的 setter 方法上使用相应的验证注解,例如 @NotNull、@Min、@Max 等,来确保属性值的有效性。

    66320

    .NET4.0的可扩展缓存系统

    下面我给大家介绍一个实现这样一个架构的代码示例,代码的核心就是ObjectCache: 定义一个抽象的Provider接口: 1: public interface ICacheBuilder...所有的HTTP响应、所呈现的页面和控件缓存均使用上例所示的默认输出缓存提供程序(其中defaultProvider属性值为AspNetInternalProvider)。...通过为defaultProvider指定不同的提供程序。就可以更改web应用程序的默认输出缓存提供程序。 另外,还可以针对每个用户控件和各个请求选择不同的输出缓存提供程序。...要为不同的Web用户控件选择不同的输出缓存提供程序,最简便的方法是设置页面或控件指令中新增加的providerName属性,如下面的示例所示: OutputCache Duration="60"...文件中新增加的GetOutputCacheProviderName方法,以编程的方式指定要用于特定请求的提供程序。

    73380

    基于业务对象(列表)的筛选

    拼装SQL语句的典型实现方式 首先,创建一个页面(SqlApproach.aspx),在页面上放置三个DropDownList控件,一个GridView控件,以及一个ObjectDataSource控件...Year, Month, Day三个属性分别获取年、月、日DropDownList的值。...我们知道缓存共有三种,一种是OutputCache,一种是基于数据源控件的数据缓存,一种是基于 System.Web.Caching.Cache 类的对象缓存。...本文不是讲述如何使用缓存的,上面是让大家了解使用缓存都会发生哪些可能,只要知道使用Cache.Insert(key,value)方法可以添加缓存就可以了。...我们先定义一个接口,这个接口仅要求返回一个DateTime类型的属性Date,对于所有实现了这个接口的类,都应该可以使用我们的筛选方法(一个没有日期的对象显然不能按年、月、日筛选)。

    1.9K50

    ASP.NET设计应用程序的七大绝招

    . ~ 的用法 一般的情况下,我们是使用./../ 这样的相对路径来确定和规划我们的资源(比如图片、资源文件),但这种方式下在我们部署应用的时候,可能会出错,另外对于.ascx的控件中如果包含了一个图片...控件或文本框要填写,也就是说用户需要拉动IE的滚动条才能够填得完,那么假如用户正在可见IE范围的2/3处,选择了一个组合框的值,很不幸组合框是服务器端的,那么也就意味着页面会提交一次,而当用户再看见刷新过的页面时...DataList使用不同风格的模板 这招也非常实用,你可以制作两个不同的模板或表现形式,分别以.ascx控件的形式保存,运行时根据某个条件动态的选择使用其中的一个模板,另外ScottGu认为ItemDataBound...很简单将你的控件放在一个DIV中将overflow属性设置成auto <div style=“height:400px;width:200px;overflow:auto”> <asp:datagrid...对于非ASP.NET的标准控件的自定义控件必须实现IAttributeAccessor接口或从WebControl派生并且可用expando属性 asp:ImageButton id=“foo” ImageUrl

    71050

    ExoPlayer播放音视频的使用介绍

    您可以将PlayerControlView作为独立组件使用,或者实现您自己的播放控件,直接与播放器交互。...这些实现在本指南后面会有更详细的介绍。 以下代码显示了如何使用适用于播放MP4文件的MediaSource准备播放器。 // 在播放期间测量带宽。...已注册的监听器会收到播放状态更改以及何时发生导致播放失败的错误的通知。 实现自定义播放控制的开发人员应该注册一个监听器,并在播放器的状态发生变化时使用它来更新控件。...默认情况下,消息尽快在回放线程上传递,但可以通过设置另一个回调线程(使用PlayerMessage.setHandler)或通过指定传递播放位置(使用PlayerMessage.setPosition)...LoadControl - 实现自定义的LoadControl允许应用程序开发人员更改播放器的缓冲策略。

    6.5K20

    ABP入门系列(13)——Redis缓存用起来

    引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用户,以供用户选择。我们每创建一个任务时都要去数据库取一次用户列表,然后绑定到用户下拉列表显示。...这一节我们就针对这一案例来看一看Abp中如何使用缓存来提高程序性能。 2. Abp的缓存机制 在直接使用缓存之前,我们还是来简单梳理下Abp的缓存机制。...Abp之所以能成为一个优秀的DDD框架,我想跟作者详细的文档有很大关系, 作者已经在ABP官方文档介绍了如何使用Caching,英文水平好的就直接看官方的吧。...使用[OutputCache]进行缓存 如果对OutputCache不了解,可以参考我的这篇文章Asp.net mvc 知多少(九)。...总结 这篇文章中主要梳理了Abp中如何进行缓存管理,并简要介绍了Abp中的缓存机制,并与Asp.net mvc自带的[Outputcache]缓存进行简要对比,并进行了缓存管理实战演练。

    2.4K90

    ASP.NET 4 AppFabric 输出缓存提供程序

    这是一个非常强大的工具来帮助你定制应用程序数据的缓存策略及使用模式,不过你需要对数据缓存的原则有一定的理解。隐式缓存使用方式利用了默认的缓存策略,能在常用的场景中发挥作用。..." VaryByParam="None" %> 需要注意的是,只能在UserControl中指定Provider的名字,在Page的声明中是不允许的,在Page中默认情况会使用web.config中配置的...同样地,如果我将[OutputCache]特性加到某个ASP.NET MVC控制器的任意一个action方法上时,内容也会通过使用我的ScottOutputCache提供器被缓存和保存起来: ?...3)你可以通过覆盖应用的Global.asax文件中的 GetOutputCacheProviderName() 方法,在每个请求的基础上,动态指定使用哪个输出缓存提供器。...中构建和使用自定义的 OutputCache 提供程序

    2K90
    领券