В моем проекте (C #, VS2010,.NET 4.0 )есть требование, чтобы конкретный цикл for
завершался в течение 200 миллисекунд. Если это не так, то он должен завершиться по истечении этого времени без выполнения оставшихся итераций. Цикл обычно продолжается от i = 0
до примерно 500 000–700 000, поэтому общее время цикла варьируется.
Я прочитал следующие вопросы, которые похожи, но они не помогли в моем случае:
До сих пор я пытался использовать объект Stopwatch
для отслеживания прошедшего времени, но у меня это не работает. Вот 2 разных метода, которые я пробовал до сих пор:
Способ 1. Сравнение прошедшего времени в цикле for
:
Stopwatch sw = new Stopwatch();
sw.Start();
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
break;
}
sw.Stop();
Это не работает, потому что if (sw.Elapsed > TimeSpan.FromMilliseconds(200))
выполняется более 200 миллисекунд. Поэтому бесполезен в моем случае. Я не уверен, что TimeSpan.FromMilliseconds()
обычно занимает так много времени или по какой-то причине это только в моем случае.
Способ 2. Создание отдельного потока для сравнения времени:
Stopwatch sw = new Stopwatch();
sw.Start();
bool bDoExit = false;
int msLimit = 200;
System.Threading.ThreadPool.QueueUserWorkItem((x) =>
{
while (bDoExit == false)
{
if (sw.Elapsed.Milliseconds > msLimit)
{
bDoExit = true;
sw.Stop();
}
System.Threading.Thread.Sleep(10);
}
});
for (i = 0; i < nEntries; i++) // nEntries is typically more than 500,000
{
// Do some stuff
...
...
...
if (bDoExit == true)
break;
}
sw.Stop();
У меня есть другой код в цикле for, который печатает некоторую статистику. Это говорит мне, что в случае метода 2 цикл for
определенно прерывается до завершения всех итераций, но время цикла по-прежнему составляет 280 -300 миллисекунд.
Любые предложения разорвать цикл for строго с -за 200 миллисекунд или меньше? Спасибо.