C# 在ASP.NET 3.5 WebForms中初始化一次性逻辑的首选方法是什么?
情景:C# 在ASP.NET 3.5 WebForms中初始化一次性逻辑的首选方法是什么?,c#,asp.net,vb.net,webforms,application-state,C#,Asp.net,Vb.net,Webforms,Application State,情景: 我有一个基于ASP.NET3.5WebForms的网站 它包含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()为第一个流将数据存储初始化为Cach
- 我有一个基于ASP.NET3.5WebForms的网站
- 它包含
、Foo.aspx
和Bar.aspx
(jQuery模板)baz.html
- 看到的典型流量是
(N次)、Foo.aspx
(N次)和Bar.aspx
(10*N次)baz.html
- ASP.NET工作进程(
)每2小时循环一次aspnet_wp.exe
- 存在一个较旧的API(
),它只需要为OldFooService.Init()
的第一个请求执行Foo.aspx
为第一个流将数据存储初始化为OldFooService.Init()
,但为后续流激发空格Cache
Foo.aspx
的流量低于baz.html
,并且OldFooService.Init()
在第一次之后会触发空格
我应该用C吗?写入Application\u State
需要锁定(),并且不能保证它是可用的,因此不确定这是否值得。还是有更好的D
选项:
A) 在Global.asax的应用程序中启动
B) 在页面中加载Foo.aspx的一次(通过选中而不是IsPostBack
)
C) 选项B+在ApplicationState
中使用一个标志,每次循环aspnet_wp.exe
运行一次正确答案是(a),使用Global.asax。B将不起作用,因为后续GET请求将运行相同的代码。C会起作用,但它丑陋如罪
我建议在Global.asax中处理Application\u Start或Application\u Init,具体取决于旧版Init函数的要求。这里的正确答案是(A),使用Global.asax。B将不起作用,因为后续GET请求将运行相同的代码。C会起作用,但它丑陋如罪
我建议在Global.asax中处理Application\u Start或Application\u Init,具体取决于旧版Init函数中需要的内容。如果OldFooService.Init()可以的话如果在初始化之前请求同时传入,那么我将使用C。如果每次循环都必须运行一次,那么我将使用带有适当读/写锁的静态类
另一方面,工人流程是否每2小时循环一次?这似乎相当频繁。如果OldFooService.Init()可以在初始化之前同时被调用几次,那么我会使用C。如果每次循环都必须运行一次,那么我会使用带有适当读/写锁的静态类
另一方面,工人流程是否每2小时循环一次?这似乎很常见。答案似乎非常明显,A。我很好奇你为什么犹豫,决定这么问?更新了我的问题。旧的服务只需要在Foo.aspx的第一个请求中运行。由于baz.html的流量更高,而且aspnet_wp.exe也会不断循环使用,这不需要旧的服务,因此我不太确定是否在Global.asax.Application_Start中初始化只启动一次,当工作进程启动时,每2小时启动一次似乎并不坏。我们谈论的是什么类型的缓存?较旧的服务使用HttpContext.Current.Cache。我们谈论的缓存有多大?从开始到结束,运行OldFooService.Init()需要多长时间?什么是内存占用?答案似乎非常明显,A。我很好奇你为什么犹豫,决定这么问?更新了我的问题。旧的服务只需要在Foo.aspx的第一个请求中运行。由于baz.html的流量更高,而且aspnet_wp.exe也会不断循环使用,这不需要旧的服务,因此我不太确定是否在Global.asax.Application_Start中初始化只启动一次,当工作进程启动时,每2小时启动一次似乎并不坏。我们谈论的是什么类型的缓存?较旧的服务使用HttpContext.Current.Cache。我们谈论的缓存有多大?从开始到结束,运行OldFooService.Init()需要多长时间?内存占用是多少?谢谢你的回答。对不起,我没有正确描述我的情景。旧的服务只需要在Foo.aspx的第一个请求中运行。由于baz.html的流量更高,而且aspnet_wp.exe会不断循环使用,这不需要旧的服务,因此我不太愿意在Global.asax中进行初始化。问题是,在工作进程的2小时生命周期内,N>1(访问Foo.aspx的次数)吗?如果是这样,在Global.asax中定位逻辑仍然是有意义的。还有,为什么你的员工流程经常被回收?谢谢你的回答。对不起,我没有正确描述我的情景。旧的服务只需要在Foo.aspx的第一个请求中运行。由于baz.html的流量更高,而且aspnet_wp.exe会不断循环使用,这不需要旧的服务,因此我不太愿意在Global.asax中进行初始化。问题是,在工作进程的2小时生命周期内,N>1(访问Foo.aspx的次数)吗?如果是这样,在Global.asax中定位逻辑仍然是有意义的。还有,为什么你的员工流程经常被回收?谢谢你的回答。频繁的回收只是开发/测试环境自动化构建的副作用。我可以看出我的话是如何描述错误的上下文的,我会注意避免将来出现这种情况。谢谢你的回答。频繁的回收只是开发/测试环境自动化构建的副作用。我可以看出我的话是如何勾勒出错误的上下文的,我会注意避免在将来出现这种情况。