我最近问了一个关于在ASP.NETMVC WebAPI应用程序中缓存应用程序数据的问题,它将我引向了一个新的问题.ASP.NET中提供的不同缓存方法的优缺点是什么?

我偶然发现:

  • 内存缓存

    http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

  • 使用静态成员变量:

    private static Northwind.SuppliersDataTable suppliers = null;
    
  • 应用程序状态:

     HttpContext.Current.Application["key"] ="Value"
    
  • 数据缓存:

    HttpRuntime.Cache.Insert(
      /* key */                "key", 
      /* value */              "value", 
      /* dependencies */       null, 
      /* absoluteExpiration */ Cache.NoAbsoluteExpiration, 
      /* slidingExpiration */  Cache.NoSlidingExpiration, 
      /* priority */           CacheItemPriority.NotRemovable, 
      /* onRemoveCallback */   null);
    

我相信还有其他的,而且我知道从技术上讲,它们都将数据存储在内存中……那么,你知道我应该为ASP.NETMVC webapi使用什么吗?

我之前的问题是: Caching application data in memory: MVC Web API

推荐答案

每种缓存技术/方法都有自己的一套功能.这些特性在一个应用程序需求中似乎是不利的,但在其他应用程序需求中可能是有利的.

因此,简而言之,根据您的需求决定哪种缓存技术和哪种功能最适合您.

100.

MSDN表示,我们也可以使用HiddenField在隐藏字段中只存储少量频繁更改的数据,因为这些数据包含在每次回发时到服务器的往返中.

Advantage of this feature:通过使用客户端选项存储页面信息,减少了服务器上的工作量.

然而,MSDN明确表示:这种方法的安全支持非常少.

因此,人们可能会也可能不会始终使用此功能,因为安全方面的考虑也在那里.

100101:有两种类型,页面输出缓存和页面分片缓存.

页面输出缓存缓存整个网页,仅当该网页的内容相当静态时才适用.如果页面的某些部分正在更改,可以将静态部分包装为用户控件,并使用页面片段缓存来缓存用户控件.

100 ApplicationHttpRuntime.cache:

Application不是缓存,它是全局命名值集合.如果您将一个对象添加到Application,它将一直保留到一个appdomain回收.

  • 应用程序变量是web应用程序的所有用户之间共享的变量
  • 应用程序变量的行为类似于静电变量,它们是静电变量的替身,因为静电变量在Web应用程序中是无状态的
  • 只有共享值应该保存在应用程序变量中,一旦它们不使用,就应该显式删除它们.

Cache:ASP有可能获得显著的性能改进.NET应用程序,缓存ApplicationCache类中频繁请求的对象和数据.虽然Cache类确实提供了更大的灵活性和控制能力,但与Application类相比,它在提高缓存吞吐量方面似乎只提供了一个微不足道的优势.很难开发一个测试方案来准确衡量Cache类通过清除过程对较少使用的对象进行内置管理的潜在优势,而不是应用程序不提供此功能.在这种情况下,开发人员需要做出决定,并且应该基于项目的需求和便利性及其使用模式.查看100了解更多信息.

有关ASP.NET中所有缓存技术的完整详细说明,请参阅100,并讨论每种技术的特性.

此外,这两个链接也是一个很好的来源:

Asp.net相关问答推荐

'dotnet --version is returning您必须安装或更新.NET才能运行此应用程序.三十九岁;

如何从 Azure 上托管的应用服务获取登录用户名?

.net 中的 [] 括号是什么?

您如何处理多个环境的多个 web.config 文件?

如何防止 IISExpress 和我的网站文件夹弄乱我的文档文件夹?

如何调试 Azure 500 内部服务器错误

如何在 IISExpress 上使用带有 localhost 的子域?

如何从网页 (asp.net) 启动 EXE

将 ListItem 的 ASP.NET 列表数据绑定到 DropDownList 问题

MVC5 身份验证中的......与主域之间的信任关系失败

如何从 ASP.NET 中的数据表/数据视图中 Select 前 n 行

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

Html.RenderAction 和 Html.Action 的区别

Asp.Net Mvc - 如何在共享视图中有一个控制器

会话存储在客户端还是服务器端

盒式磁带包与 MVC4 包

.Net System.Mail.Message 添加多个收件人地址

MVC4 - 当优化设置为 true 时Bundle 不起作用

在 Visual Studio 2012 中调试 .NET Framework 源代码?

在 ASP.NET 中使用 SecureString 有什么好处吗?