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
    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\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中定位逻辑仍然是有意义的。还有,为什么你的员工流程经常被回收?谢谢你的回答。频繁的回收只是开发/测试环境自动化构建的副作用。我可以看出我的话是如何描述错误的上下文的,我会注意避免将来出现这种情况。谢谢你的回答。频繁的回收只是开发/测试环境自动化构建的副作用。我可以看出我的话是如何勾勒出错误的上下文的,我会注意避免在将来出现这种情况。