如何每天重置应用程序变量
本文关键字:应用程序 变量 每天 何每天 | 更新日期: 2023-09-27 18:02:26
我正在写一个记录服务呼叫和治疗完成情况的程序。我们有许多用户打开和关闭呼叫,我想随时显示今天打开和关闭的总呼叫数以及它们之间的差异。我想用应用变量来做。我必须每天将这些变量重置为0。我在哪里做呢?我认为在全球。但是在什么情况下可以做到呢?应用程序一直在运行,所以我认为Application_Start不合适。所以在哪里?谢谢你。
您可以在IIS中配置应用程序池回收的定期重启设置:
元素包含允许您控制何时回收应用程序池的配置设置。您可以指定Internet信息服务(IIS) 7在一段时间间隔(以分钟为单位)后或每天的特定时间回收应用程序池。您还可以将IIS配置为基于应用程序池中工作进程正在使用的虚拟内存或物理内存量进行回收,或者将IIS配置为在工作进程处理特定数量的请求后回收应用程序池。
但是,这有一个副作用,即在池重新启动期间使应用程序脱机,因此,如果此时有任何用户连接,它将失去会话。这可以通过在没有用户连接的时候重新启动应用程序来最小化,比如在黎明。
下面的配置片段将应用程序池设置为在凌晨3:00进行每日回收:
<add name="Example">
<recycling logEventOnRecycle="Schedule">
<periodicRestart>
<schedule>
<clear />
<add value="03:00:00" />
</schedule>
</periodicRestart>
</recycling>
<processModel identityType="NetworkService" shutdownTimeLimit="00:00:30" startupTimeLimit="00:00:30" />
</add>
我将有一个日期变量,其中包含计数器最后一次重置的时间,并在每次访问计数器时检查日期是"今天"。
除非你有严重的性能问题,否则我想这是最好的方法。
在更新计数器时调用的示例easy-lazy代码:lock(myCounter)
{
if(DateTime.Now.Date != lastDateCounterWasReset)
{
lastDateCounterWasReset = DateTime.Now.Date;
myCounter = 0;
}
myCounter++;
}
现在我们需要更多地了解如何存储这些变量(myCounter
和lastDateCounterWasReset
),但基本上可以在任何地方(数据库,文件系统等)
我会将呼叫存储到数据库中,并根据当前日期选择哪些组可以获得总呼叫等,以显示
这样,当新的一天开始时,它会自动为你重置,你不必担心IIS重置会破坏你的内存数据。
如果您不希望过于频繁地查询对性能造成影响,可以使用许多缓存选项。
我想你可以使用Application_BeginRequest
方法。使用布尔值查看当天是否已经运行。