【问题标题】:Priming the asp.net output cache启动 asp.net 输出缓存
【发布时间】:2011-10-14 15:10:55
【问题描述】:

有没有办法以编程方式初始化 asp.net 输出缓存?我调查了缓存 API,似乎找不到明显的方法来做到这一点。有没有人尝试过这样的事情?如果有,你用了什么方法?

【问题讨论】:

  • 首要,你的意思是你希望它提前预加载和缓存所有页面,这样第一个用户就不必等待页面被创建?
  • @Doozer:是的,这正是我所追求的。
  • 我从未尝试过,也从未见过它做过。想知道您是否可以在 Application_Start 上启动另一个线程,然后使用 WebRequest 或其他方式访问您的所有页面。

标签: asp.net outputcache


【解决方案1】:

我去年对此进行了一些思考,最后得出结论认为这对这个案例并不重要,但如果它对你的网站很重要,你所要做的就是简单地从 Application_Start 之类的地方调用网页(之后所有代码都已运行)事件,但你不应该停在那里!

缓存最终会过期,为避免您应该设置某种方式在任何客户端请求该页面之前再次缓存页面。

使输出缓存依赖于缓存中的其他对象并设置过期回调。

因此,当缓存对象过期时,您的页面也会过期,您应该向要重新缓存的页面发出 http 请求,依此类推。

我正在回答这个问题,但我仍然在脑海中的努力和问号让我建议不要经历这个......

更新

only kind of dependency you may set in outputcache is sql dependency。如果您愿意,可以使用它,但如果您需要将输出缓存依赖于其他业务对象,那么这可能会变得非常困难。我可以告诉你,你可以设置一个数据库对象并依赖于你的数据库,然后使用某种计时器自行使其过期。

伙计,我写的时间越长,我找到的解决方案和困难就越多!我不能为不值得你宝贵时间的东西写书。相信我,这样做的用处几乎为零。

【讨论】:

  • 如果您愿意在答案中添加一些示例代码,我将奖励您。
  • 直到现在我才看到你的评论@DanP。无论是否收到赏金,我都不能给你任何源代码,原因很简单,我没有阅读更新。
  • Fabio:感谢您的更新,有时“这不是一个好主意”也是一个完全可以接受的答案 :)
【解决方案2】:

正如其他人建议的那样,启动缓存就像请求要缓存的页面一样简单。当然,如果您以编程方式执行此操作,它只会请求 HTML 而不是所有链接资源(CSS、JavaScript、图像...),这是避免浪费带宽的好方法。

对于许多网站来说,消耗最大性能损失的缓存项目对于许多或所有页面都是常见的。例如,大型 CMS 或店面上的导航系统可能会查询数据库并进行大量渲染工作,然后可以为所有页​​面缓存这些工作。此外,ASP.net 中初始加载的很大一部分是当网站首次访问并加载到内存中时。这两个问题都可以通过调用您网站上的单个页面来解决,但没有什么能阻止您制作 URL 列表并定期调用每个页面。

如果您的缓存政策设置为 20 分钟超时,则可能每 17-18 分钟请求每个页面一次。

以下是一些包含源代码的资源,可帮助您入门:

Good Simple Primer on requesting web URL in C#

Website Monitoring Windows Service

Asyncronous Website Monitor

正如我之前提到的,您可以轻松地将这些扩展为“foreach”,覆盖要请求的 URL 数组或列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2012-08-15
    • 2011-01-26
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多