如何每天重置应用程序变量

时间:2013-03-06 12:08:25

标签: c# asp.net application-variables

我正在编写一个记录服务电话和治疗的程序。我们有许多用户打开和关闭来电,我想随时显示今天开通的电话总数和今天关闭的总数以及它们之间的差异。我想过用一个应用程序变量来做。我必须每天将这些变量重置为0。我会在哪里这样做?我在Global.asax中想过,但在哪个事件可以做到?应用程序一直在运行,所以我认为Application_Start不合适。那么在哪里?谢谢。

4 个答案:

答案 0 :(得分:2)

我有一个日期变量,上次重置计数器,并在每次访问计数器时检查日期是“今天”。

除非您遇到严重的性能问题,否则我认为这是最佳选择。

在更新计数器时调用简单易用的代码示例:

lock(myCounter)
{ 
  if(DateTime.Now.Date != lastDateCounterWasReset)
  {
     lastDateCounterWasReset = DateTime.Now.Date;
     myCounter = 0;
  }
  myCounter++;
}

现在我们需要了解更多关于如何存储这些变量(myCounterlastDateCounterWasReset)的信息,但基本上可以在任何地方(数据库,文件系统等)< / p>

答案 1 :(得分:2)

您可以在IIS中配置Periodic Restart Settings for Application Pool Recycling

  

该元素包含允许您控制应用程序池何时被回收的配置设置。您可以指定Internet Information Services(IIS)7在一段时间间隔(以分钟为单位)或每天的特定时间后回收应用程序池。您还可以将IIS配置为基于应用程序池中的工作进程正在使用的虚拟内存或物理内存量的回收,或者在工作进程处理了特定数量的请求后将IIS配置为回收应用程序池。

但是这会导致在重新启动池期间将应用程序置于脱机状态的副作用,因此如果您在此时连接了任何用户,则会丢失其会话。这可以通过在没有用户连接的情况下重新启动应用程序来最小化,例如在黎明时。

以下配置代码段将应用程序池设置为每天在凌晨3点回收:

<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>

答案 2 :(得分:1)

我会将呼叫存储到数据库中,然后按当天选择哪些组来获取总呼叫数等等。

这样,当新的一天开始时,它会自动为您重置,而您无需担心IIS Resets会破坏您的内存数据。

如果您不希望频繁查询性能,可以使用多种缓存选项。

答案 3 :(得分:0)

我想你可以使用Application_BeginRequest方法。使用布尔值来查看它是否已在当天运行。

另一个选项是调度程序,其中包含要重置的隐藏URL。