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

Sha*_*ill 1 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();
    }
Run Code Online (Sandbox Code Playgroud)

这是经过的代码:

        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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

Mar*_*zek 6

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

如果Enabled设置为trueAutoReset设置为false,则仅在第一次间隔过去时将事件Timer提升Elapsed一次.如果EnabledtrueAutoResettrue,将Timer继续提高在指定的时间间隔经过的事件.

来自Timer.Start方法

默认为AutoResetis true,所以第二句描述了你的情况.

您当前的代码Timer每50秒启动一次,而不会停止或删除旧代码.这就是你获得高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();
    }

}
Run Code Online (Sandbox Code Playgroud)