c#新线程定时器句柄问题
本文关键字:定时器 句柄 问题 线程 新线程 | 更新日期: 2023-09-27 17:50:16
我在试验下面的代码
private void timer1_Tick(object sender, EventArgs e)
{
Thread nT = new Thread(new ThreadStart (checkThread));
nT.Start();
}
checkthread()函数执行web请求,定时器的tick属性为2000ms。checkThread()中的所有对象在使用后都会被处理掉。当程序长时间运行时,例如3小时,操作系统会抱怨资源不足。我注意到在ctrl-alt-delete中,当应用程序运行时,句柄数会增加。线程在执行完所有代码后不会自动释放内存吗?允许付费吗?
定时器的tick属性是2ms
首先,你的计时器不会遵守这个。分辨率为~ 20ms
但是即使20毫秒对于Webrequest来说也不是很长。如果你的checkThread超过了20ms(每隔一段时间),那么你启动线程的速度就会比完成线程的速度快。所以它们就会堆积起来。花了几个小时的事实让我认为这是最有可能的原因。
您可以使用调试器或简单的计数器activeThreads
(使用Interlocked)来诊断此问题。
你应该让框架处理线程,而不是使用Thread
去ThreadPool。QueueUserWorkItem