Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC为每个操作命中outputcache_Asp.net Mvc_Outputcache - Fatal编程技术网

Asp.net mvc ASP.NET MVC为每个操作命中outputcache

Asp.net mvc ASP.NET MVC为每个操作命中outputcache,asp.net-mvc,outputcache,Asp.net Mvc,Outputcache,我们使用ASP.NET MVC 3和AppFabric作为分布式缓存解决方案运行了一个相当大的站点构建。我们已经实现了一个自定义OutputCacheAdapter来使用我们的AppFabric集群 我们看到ASP.NET为每个操作调用OutputCacheProvider.Get()方法,即使该操作没有使用@OutputCacheAttribute修饰 如果您使用默认的outputcacheprovider,这不是什么大问题,但是当您运行驻留在不同机器上的outputcacheprovider

我们使用ASP.NET MVC 3和AppFabric作为分布式缓存解决方案运行了一个相当大的站点构建。我们已经实现了一个自定义OutputCacheAdapter来使用我们的AppFabric集群

我们看到ASP.NET为每个操作调用OutputCacheProvider.Get()方法,即使该操作没有使用@OutputCacheAttribute修饰


如果您使用默认的outputcacheprovider,这不是什么大问题,但是当您运行驻留在不同机器上的outputcacheprovider时,这是一个问题。

根据设计,首先检查输出缓存以获得页面的缓存副本。如果存在缓存副本,则返回该副本,不再执行任何操作。特别是,未派生、检查或执行任何控制器和控制器操作。只有当页面未缓存时才会发生这种情况


您需要更改缓存提供程序,以便它能够快速确定是否可以缓存页面。只有当它是一个可缓存的页面时,它才应该去检查分布式缓存。此检查不能基于
OutputCacheAttribute
,因为它们在请求处理的这一部分中不可用。相反,必须使用URL、cookies和其他HTML标题信息进行快速检查。

您可以使用Donut Cache outputcache属性,该属性允许您为输出缓存键定义前缀。因此,在自定义提供程序中,如果缓存键以您自己的前缀开头,则只需获取/设置缓存

是的,这听起来是个很好的解释。尽管如此,我还是不能对此做太多,要么接受性能损失,返回默认的OutputCacheProvider,要么为URL提供类似于黑名单或白名单的内容。@尽管我自己没有这样做,但您不能获取路由参数,然后使用反射检查控制器/操作上的属性吗?这并不理想,但可能仍然比网络往返快。