【发布时间】:2012-07-11 03:14:47
【问题描述】:
场景:
- 我有一个基于 ASP.NET 3.5 WebForms 的网站。
- 它包含
Foo.aspx、Bar.aspx和baz.html(jQuery 模板)。 - 看到的典型流量是
Foo.aspx(N 次)、Bar.aspx(N 次)和baz.html(10*N 次)。 - ASP.NET 工作进程 (
aspnet_wp.exe) 每 2 小时回收一次。 - 存在一个较旧的 API (
OldFooService.Init()),仅需要为Foo.aspx的第一个请求执行。OldFooService.Init()为第一个流初始化一个数据存储到Cache,但为后续流触发空白。
问题:
我目前正在做 B(见下文),因为 Foo.aspx 的流量低于 baz.html 和 OldFooService.Init() 在第一次后触发空白。
我应该使用 C 吗?写信给Application_State 需要锁定(MSDN)并且不能保证它可用,所以不确定它是否值得努力。还是有更好的 D?
选项:
A) 在Application_Start 中的Global.asax
B) 在Foo.aspx 的Page_Load 中一次(通过检查Not IsPostBack)
C) 选项 B + 在ApplicationState 中使用一个标志,以在每次循环使用aspnet_wp.exe 时运行一次。
【问题讨论】:
-
答案似乎非常明显,A。我很好奇你为什么犹豫并决定问 SO?
-
更新了我的问题。旧服务只需要为 Foo.aspx 的第一个请求运行。由于 baz.html 的流量较高,而且 aspnet_wp.exe 会不断回收,不需要旧服务,因此我犹豫是否在 Global.asax 中初始化。
-
Application_Start 只触发一次,当工作进程启动时,每 2 小时执行一次似乎还不错。我们在谈论什么类型的缓存?
-
旧服务使用 HttpContext.Current.Cache。
-
我们所说的缓存有多大?从开始到结束,您的 OldFooService.Init() 需要多长时间才能运行?内存占用是多少?
标签: c# asp.net vb.net webforms application-state