【发布时间】:2010-11-03 20:24:20
【问题描述】:
我有一个使用顺序 Parallel.For 语句的 VB.NET WinForms 应用程序。
添加 Threading.Timer 后,Parallel.For 循环慢到爬行,内核时间量跃升至近 80%。
这两者在我的代码中不相关(即两者都不由另一个运行),也不共享任何代码或数据。
删除计时器可以解决问题。
有没有其他人经历过这种行为?解决此行为的最佳方法是什么(宁愿不创建 WinForms 计时器,但如果必须的话)?
这是定时器执行的代码:
Public Sub Tick()
IO.File.WriteAllText("c:\test.txt", DateTime.Now.ToString())
End Sub
这是定时器创建语句:
tmrFile = New Threading.Timer(AddressOf Tick, Nothing, New TimeSpan(0, 0, 0), New TimeSpan(0, 1, 0))
【问题讨论】:
-
有趣..你能发布一些重现问题的简单代码吗?
-
简单在这种情况下可能不是很简单。并行 fors 正在执行大量内存复制和图像重采样。线程计时器只是用当前日期时间更新文件。如果我有时间,我会看看我是否不能举个例子来重现这种行为。
-
@ColorEyes,如果你删除了 Parallel.For 循环,只是定时器的东西会让你的机器忙吗?
-
@Albin - 如果我注释掉 Parallel.For 循环,程序似乎运行正常(尽管没有完成任何工作)。因此,取出循环或计时器使程序运行正常。也许运行计时器和循环会以某种方式破坏 ThreadPool(假设它们都使用线程池)。
-
@ColorEyes .. 如果你保持计时器,但不做任何有用的事情?计时器多久运行一次?
标签: .net multithreading timer