【问题标题】:ASP.NET server cachingASP.NET 服务器缓存
【发布时间】:2013-02-12 00:28:05
【问题描述】:

我有一个在 windows server 2008 r2 上运行的 Web 应用程序。其中一个页面在首次加载时处理时间过长。大约需要 15 秒,之后几乎是瞬间。发生的情况是 w3wp.exe 进程在这段时间内从 200 MB 以下的 RAM 跳转到 700 MB 的 RAM。没关系,页面很大,需要这么多内存。在这 15 秒之后,它会切换回大约 200 MB 的 RAM,如果有人访问该页面,它几乎会立即呈现。无论是谁请求它,它都是第一次呈现。现在,经过一段时间(如果不是几十分钟的话,几分钟),当有人再次请求该页面时,它会做同样的事情 - 处理 15 秒并跳转到 700 MB 的 RAM。

我想以某种方式保留 700 MB 的缓存,这样它就不会过期。即使在它回落到 200 MB 的 RAM 之后,页面也会立即加载,但我的猜测是,这就是为什么在较长一段时间后它“过期”并且必须再次呈现它的原因。我已经阅读了@outputcache,但我不确定这是我需要的。还有many types of caching。有人能指出我正确的方向吗?我不担心内存消耗或其他任何事情,我只是不希望用户等待 15 秒来加载它,即使它不经常发生。谢谢!

PS:在 ASP.NET 4.0 下用 C# 编写的应用程序

【问题讨论】:

  • 可能不是缓存的问题。这可能是页面加载事件代码中的问题。请检查页面加载事件。你有没有在你的页面中使用任何线程?
  • 我猜不是,我不确定你的意思。你能给我一个小例子吗?谢谢!
  • 在页面加载事件 protected void Page_Load(object sender, EventArgs e) { } 执行代码花费了太多时间。这意味着在页面加载时有很多代码要在服务器中执行。您的页面 laod 事件中是否有任何 stsrem.threading.thread 方法?
  • 感谢您的回复,不,我根本没有使用过 system.threading(如果这就是您要写的)。你认为这会解决第一次延迟的问题吗?服务器有 2 个 3.2 ghz 的核心。
  • 我的意思不是线程方法。您是否有任何类似于页面加载事件上的高时间说服代码的代码。您可以在页面加载事件中发布代码吗?

标签: asp.net .net caching memory


【解决方案1】:

您的页面在应用程序池启动后第一次被调用时被编译 (http://msdn.microsoft.com/en-us/library/ms366723(v=vs.100).aspx)。

中间应用程序池在关闭前的默认超时时间为 20 分钟:http://technet.microsoft.com/en-us/library/cc771956(v=ws.10).aspx

如果在应用池关闭后有新的请求,应用池需要重新启动并重新编译你的页面。

除了改进应用程序中的缓存之外,您还可以做 2 件事:

【讨论】:

  • 是的,你是对的,这是有道理的。我会看看我能做什么。
猜你喜欢
  • 2013-05-22
  • 2013-07-09
  • 2011-01-05
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多