У меня есть программа, которая проверяет состояние товара на сайте.Медленная инициализация нескольких system.threading.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.timer _timerC;
я назвал _timerA проверить статус товаров и призвал _timerList купить товар со списком счета 10 счетов когда товар вверх.
Выполняю _timerA за 500 мс.
_timerA = new System.Threading.Timer(new TimerCallback(submit_checkgoods), 0, 0, 500);
Внутри submit_checkgoods (_timerList.Add (...) называется ранее):
if (goodsIsUp == true)
{
for (int k = 0; k < infolistbb.Count; k++)
{
int copy = k;
_timerList[copy] = new System.Threading.Timer(new TimerCallback(submit_buygoods), copy, 0, 0);
}
}
Проблема заключается в том, что я считаю, что вызов _timerlist [копировать] для выполнения очень медленно.
Я использовал секундомер, чтобы проверить время вызова _timerlist для выполнения до конца submit_buygoods и времени выполнения submit_buygoods.
Исключение submit_buygoods действительно быстрое, но вызывающий процесс похож на один на один.
После того, как _timerList [0] закончил выполнение submit_buygoods, _timerList [1], затем перейдите.
Является ли это недостатком System.threading.timer, когда слишком много потоков (на самом деле около 15)?
В чем причина? Любое средство? Будет ли переключиться на Thread t = new Thread()?
Ответные запросы по таймеру выполняются на резьбовых нитях. Диспетчер threadpool пытается ограничить количество выполняемых потоков TP на количество ядер, доступных в машине. Мудрая стратегия. –
Я искал о Task.Factory.StartNew. Он также запланирован на ThreadPool, и StartNew не гарантирует отдельный поток. Как я плохо разбираюсь в потоках. Можете ли вы дать мне совет, какую резьбу следует использовать, если я хочу, чтобы они выполнялись отдельно и сразу? –
Мне кажется, что вы используете таймеры неправильно. Вы используете таймер, если хотите, чтобы что-то происходило периодически. Вы не вызываете таймер. Измените свой вопрос, чтобы описать, что вы хотите сделать, и предложим решение. Не просто догадывайтесь, что может сработать, потому что вы просто путаете проблему. –