gpt4 book ai didi

c# - 如何解决我的计时器循环的内存问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:11:50 28 4
gpt4 key购买 nike

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

}

如您所见,它非常简单,但我想知道是否有更有效的方法来做到这一点。我假设定时器没有被正确处理或类似的东西。

有什么想法吗?

最佳答案

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

If Enabled is set to true and AutoReset is set to false, the Timer raises the Elapsed event only once, the first time the interval elapses. When Enabled is true and AutoReset is true, the Timer continues to raise the Elapsed event on the specified interval.

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

}

关于c# - 如何解决我的计时器循环的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061360/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com