为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET静态变量的生命周期

ASP.NET静态变量的生命周期

C#
米琪卡哇伊 2019-08-13 14:10:59
ASP.NET静态变量的生命周期我在页面类中定义的静态变量中持有一些信息(不在Global.asax中)。我只在代码中声明变量,如:protected static int SomeGlobalUnsecureID;protected static string SomeGlobalUnsecureString;并在PageLoad事件中定义变量。例如,我检查数据库中的ID,如果它与SomeGlobalUnsecureID不同,我从其他地方更新SomeGlobalUnsecureID和String,否则保持不变。这在我的应用程序中非常安全。逻辑(即那些数据不安全,每个人都可以访问它们,没问题); 我唯一想做的就是无论用户连接如何,都要保持相同的内存量当且仅当持久性信息与'memory'中的持久信息不同时才会改变(因为实际读取字符串对我来说非常耗时。现在,因为我在PageLoad中进行了检查,所以在重新加载的页面中没有问题。然而,我的页面充满了WebMethods,有时我看到静态变量被归零。奇怪的是; 即使静态变量归零,会话仍然处于活动状态(所以 - >没有服务器或应用程序池重启等)这对我来说真的很奇怪。我假设静态变量将保持其值,直到应用程序(以某种方式)结束。但即使Session没有过期,静态变量也会归零。你有什么建议?使用应用程序变量是更好的选择吗?我在网上看到的所有文件都提出了静态变量而不是应用程序变量,我是否需要声明它们有所不同?
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我认为以下两点对于静态变量的生命周期也很重要:

1 - 在应用程序池的高级设置中,选中“回收” - >“常规时间间隔(分钟)”设置。它的默认值是1740,这意味着在每29个小时内,由于应用程序池的回收,您的静态变量会丢失。此设置用于终止可能的内存泄漏。我不会改变这个设置..

2 - 在应用程序池的高级设置中,选中“Process Model” - >“Idle Time-out(minutes)”设置。它的默认值为20,这意味着在应用程序池中每20分钟不活动时,工作进程将被终止/暂停,这将导致静态变量丢失。此设置用于在一段时间内未使用应用程序池时释放资源。您可以将其设置为0以禁用超时。


查看完整回答
反对 回复 2019-08-13
  • 3 回答
  • 0 关注
  • 1095 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信