如何使用我的计时器循环修复内存问题

时间:2013-11-19 01:22:13

标签: c#

我对我在C#winforms应用中执行的计时器循环有疑问。每隔50秒,它应该检查系统上的时间,并将其与用户定义的时间进行比较。如果该时间与当前时间匹配,则执行该功能,否则返回计时器并再等50秒。我以为我的工作正常但是在离开应用程序后一夜之间我回来了,我的CPU是99%,它使用的是3.5gb内存。我检查了禁用的计时器,其余的应用程序运行正常,所以它必须与计时器。

这里是计时器代码:

        public void day_timer()
    {
        System.Timers.Timer timer2 = new System.Timers.Timer();
        timer2.Elapsed += new ElapsedEventHandler(daily_Elapsed);
        timer2.Interval = 50000;
        timer2.Enabled = true;
        timer2.Start();
    }

这是经过的代码:

        private void daily_Elapsed(object sender, EventArgs e)
    {
        string time_rightmeow = DateTime.Now.ToString("hh:mm tt");
        if (time_rightmeow != Configuration.Day_time)
        {
            day_timer();
        }
        else
        {
            day_backup();
        }

    }

你可以看到它非常简单,但我想知道是否有更有效的方法来做到这一点。我假设计时器没有正确处理或者那种效果。

任何想法?

1 个答案:

答案 0 :(得分:6)

您不必再次启动另一个计时器。您设置的那个将每隔Elapsed毫秒触发Interval个事件,除非您调用Stop()方法。

  

如果Enabled设置为trueAutoReset设置为false,则Timer仅将Elapsed事件提升一次,第一次间隔过去。 EnabledtrueAutoResettrue时,Timer会在指定的时间间隔内继续提升已失效事件。 < / p>      来自Timer.Start Method

AutoReset的默认值为true,因此第二句描述了您的情况。

您当前的代码每50秒启动一次新的Timer,而不会停止或删除旧代码。这就是你获得高CPU和内存使用率的原因。

daily_Elapsed更改为:

private void daily_Elapsed(object sender, EventArgs e)
{
    string time_rightmeow = DateTime.Now.ToString("hh:mm tt");
    if (time_rightmeow == Configuration.Day_time)
    {
        day_backup();
    }

}