mga*_*e2m 5 c# asp.net-mvc outputcache output-caching asp.net-mvc-4
我有下面的代码,并希望Duration在[OutputCache(Duration = 10)]行有一个变量的值,这样我可以从阅读DB或从List收藏.
而且我希望能够立即复位服务器缓存中,当Duration发生了变化.
如何在更改时更改Duration缓存HTML数据Duration?这是我的代码.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Cache_Example.Controllers
{
public class HomeController : Controller
{
// GET: Home
// [OutputCache(Duration = 10)]
public ActionResult Index()
{
return View();
}
[OutputCache(Duration = 10)]
public ActionResult ShowDate()
{
return PartialView();
}
}
}
Run Code Online (Sandbox Code Playgroud)
要更改持续时间,请按照以下步
如何在输出缓存中使用动态持续时间值? (请信用原作者)
我会从
OutputCache属性继承并在那里设置Duration:
public static class CacheConfig
{
public static int Duration = 36600;
}
public class MyOutputCacheAttribute : OutputCacheAttribute
{
public MyOutputCacheAttribute()
{
this.Duration = CacheConfig.Duration;
}
}
[MyOutputCache(VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以通过Duration动态和全局改变CacheConfig.Duration
如果需要,您仍然可以覆盖每个操作的全局设置:
[MyOutputCache(Duration = 100, VaryByParam = "none")]
public ActionResult OtherAction()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
然后,当Duration自己更改时,您可以立即重置服务器缓存.这是如何做:
"ASP.NET缓存对象位于System.Web命名空间中,并且因为它是通用缓存实现,所以它可以在任何引用此命名空间的应用程序中使用.
System.Web.Caching.Cache类是对象的缓存.可以通过静态属性System.Web.HttpRuntime.Cache或通过辅助实例属性System.Web.UI.Page和System.Web.HttpContext.Cache访问它.因此,它可以在请求的上下文之外使用.整个应用程序域中只有一个此对象的实例,因此HttpRuntime.Cache对象可以存在于Aspnet_wp.exe之外的每个应用程序域中.
以下代码显示了如何从通用应用程序访问ASP.NET缓存对象.
HttpRuntime httpRT = new HttpRuntime();
Cache cache = HttpRuntime.Cache;
Run Code Online (Sandbox Code Playgroud)
在访问当前请求的缓存对象后,您可以按常规方式使用其成员."
REF:过时的MSDN源:.NET Framework应用程序的缓存体系结构指南
注意:使用.Net 3.5,您只能使用InProc缓存,使用.NET 4,您可以在进程外部存储缓存以及使用自定义CacheProviders.
我想强调一点,如果缓存应该比AppPool循环使用的时间更长(例如每天),那么你需要缓存Out-Of-Process.
还要检查它是否在服务器上缓存:http: //msdn.microsoft.com/en-us/library/system.web.ui.outputcachelocation.aspx
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |