【问题标题】:How ASP.net MVC OutputCacheLocation.Server works?ASP.net MVC OutputCacheLocation.Server 如何工作?
【发布时间】:2013-07-14 17:05:06
【问题描述】:

我有这个问题,我想知道它是由 IIS 还是 Asp.net Framework 管理,将其保存在服务器磁盘或内存中。

我正在研究 Azure 共享缓存,寻找 OutputCache 并保存从数据库资源中获取的数据。

在我的学习结论中,我将决定缓存所有 Action Result 或 ChildActionOnly。

谢谢!

【问题讨论】:

    标签: asp.net-mvc azure outputcache


    【解决方案1】:

    默认情况下OutputCacheLocation.Server只是意味着数据存储在IISWorker Process内存空间中。如果您启用了Kernel-Mode 缓存,则数据将存储在Http.Sys 驱动程序内存空间中(这是一个操作系统进程,而不是IIS 进程)。

    Windows Azure Shared Caching 的情况下,数据被序列化并存储在虚拟机实例上的一个特殊进程中,然后该进程负责管理和同步所有角色实例之间的缓存数据。

    【讨论】:

    • 有趣,所以,经过很长一段时间,Worker Process 内存消耗,内存就上天了。我想这不是一件好事。我可以实现一个自定义输出缓存来写入磁盘或 memcached 一段时间可能会更好。而且关于 Windows Azure 共享缓存和 Windows Azure 缓存也不一样吧?
    • 您不必担心内存消耗,由 IIS 来管理这些东西,一旦达到(配置的)限制,它可能会将一些数据保存到磁盘或驱逐一些项目,具体取决于在你的配置上。见technet.microsoft.com/en-us/library/cc772095(v=ws.10).aspx
    • Azure Shared Caching 是某种“缓存即服务”模块(按月支付您使用的缓存大小)。 Azure Role Based Caching - 另一方面 - 是您在自己的角色实例中部署的缓存服务,既可以作为专用的独立工作角色来促进其大部分可用内存进行缓存,也可以作为共同定位的角色使用用于分布式缓存的现有网络/工作者角色的一些可预先配置的内存量。
    • 你告诉我,我不用担心 IIS 内存消耗,为什么不呢? IIS 内存是my responsibility as developer,如果我的应用程序消耗大量内存,是我的责任。我的应用程序有 3000 页,1000 of those 3000 page I wish cache it。默认情况下,IIS 输出缓存启用内核模式,我必须确保此缓存不会再循环,或者我的服务器是否应该有更多内存 RAM 或其他缓存解决方案。
    • 确实必须担心您的部署的应用程序/代码所使用的 IIS 内存消耗。我的意思是您不必担心 Output Cache 模块的内存管理(这不是您的代码和内置 IIS)。引用我最近评论中的链接:When the default value of 0 is set, IIS automatically manages the cache memory size.
    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2010-11-23
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多