我的项目(C#、VS2010、.NET 4.0)中有一个特定for
循环必须在 200 毫秒内完成的要求。如果没有,那么它必须在此持续时间之后终止,而不执行剩余的迭代。循环通常会持续i = 0
约 500,000 到 700,000,因此总循环时间会有所不同。
我已经阅读了以下类似的问题,但它们对我的情况没有帮助:
到目前为止,我已经尝试使用一个Stopwatch
对象来跟踪经过的时间,但它对我不起作用。到目前为止,这是我尝试过的两种不同的方法:
方法 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 毫秒。
有什么建议可以在 200 毫秒或更短的时间内严格打破 for 循环?谢谢。