Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多个system.threading.timer的缓慢初始化_C#_Multithreading_Timer - Fatal编程技术网

C# 多个system.threading.timer的缓慢初始化

C# 多个system.threading.timer的缓慢初始化,c#,multithreading,timer,C#,Multithreading,Timer,我有一个程序,检查一个网站的商品状态 因为我以前没有学习过线程,所以我只是在程序中使用system.threading.timer 我有一个system.threading.timer列表和几个system.threading.timer列表 List<system.threading.timer> _timerList; System.threading.timer _timerA; System.threading.timer _timerB; System.threading.

我有一个程序,检查一个网站的商品状态

因为我以前没有学习过线程,所以我只是在程序中使用system.threading.timer

我有一个system.threading.timer列表和几个system.threading.timer列表

List<system.threading.timer> _timerList;
System.threading.timer _timerA;
System.threading.timer _timerB;
System.threading.timer _timerC;
在submit_checkgoods内部(_timerList.Add(…)在前面被调用):

if(goodsIsUp==true)
{
for(int k=0;k
问题是我发现调用_timerlist[copy]来执行非常慢

我用秒表检查调用_timerlist执行到提交_buygoods结束的时间和执行提交_buygoods的时间

submit_buygoods的执行速度非常快,但调用过程是一个接一个的

在_timerList[0]完成执行提交_buygoods后,_timerList[1]然后转到

这是System.threading.timer在线程太多(实际上只有15个)时的缺陷吗


原因是什么?有什么补救办法吗?切换到线程t=new Thread()会有帮助吗?

使用任务而不是线程,它们更适合短作业

Task.Factory.StartNew(submit_buygoods);

另外,也许你不应该每隔500毫秒就敲打一次服务器,你的IP可能会被禁止。

使用任务而不是线程,它们更适合于短任务

Task.Factory.StartNew(submit_buygoods);

另外,也许你不应该每500毫秒就敲打一次服务器,你的IP可能会被禁止。

计时器回调是在线程池线程上执行的。线程池管理器尝试将执行TP线程的数量限制为计算机中可用的内核数量。明智的策略。我搜索了Task.Factory.StartNew。它也被安排在线程池中,StartNew不能保证一个单独的线程。因为我对穿线不太了解。你能给我一个建议吗?如果我想让它们立即独立执行,我应该使用哪种线程?在我看来,你使用的计时器不正确。如果你想让某些事情周期性地发生,你可以使用计时器。你不能“叫”计时器。改变你的问题,描述你想做什么,让我们提出解决方案。不要只是猜测什么可能有效,因为你只是把问题弄糊涂了。是的,我用错了。正如我所说,我对线程不太了解,所以我选择system.threading.timer。这就是为什么我来问这个缓慢的初始化是如何发生的。我想我描述得很好。第一条评论确实帮了大忙。“线程池管理器试图将正在执行的TP线程数限制为可用的内核数”。计时器将首先进入池中,它不保证立即初始化。计时器回调将在线程池线程上执行。线程池管理器尝试将执行TP线程的数量限制为计算机中可用的内核数量。明智的策略。我搜索了Task.Factory.StartNew。它也被安排在线程池中,StartNew不能保证一个单独的线程。因为我对穿线不太了解。你能给我一个建议吗?如果我想让它们立即独立执行,我应该使用哪种线程?在我看来,你使用的计时器不正确。如果你想让某些事情周期性地发生,你可以使用计时器。你不能“叫”计时器。改变你的问题,描述你想做什么,让我们提出解决方案。不要只是猜测什么可能有效,因为你只是把问题弄糊涂了。是的,我用错了。正如我所说,我对线程不太了解,所以我选择system.threading.timer。这就是为什么我来问这个缓慢的初始化是如何发生的。我想我描述得很好。第一条评论确实帮了大忙。“线程池管理器试图将正在执行的TP线程数限制为可用的内核数”。计时器将首先进入池中,它不能保证立即初始化。我尝试过,同样的事情也会发生。但是线程=新线程()工作。无论如何,谢谢你的帮助!!我试过了,同样的事情也发生了。但是线程=新线程()工作。无论如何,谢谢你的帮助!!
Task.Factory.StartNew(submit_buygoods);