Dan*_*dor 1 .net multithreading web-services remote-desktop
我的网络服务有一个奇怪的情况.
这是一个简单的 - 它创建一个不断运行的线程,在后台进行一些磁盘检查,对于它执行的每个File.Exists,它进入Sleep(10),因此它不会占用所有的CPU核心.
这一切都很好,直到我从RDP登录.当我这样做时,这个线程会飙升并消耗尽可能多的东西.
在这里,看看......
我有两个核心,我的前台应用程序使用大约18%的CPU(在NOW-meter上显示了whis).左侧是没有人登录时的CPU使用情况.
到底是怎么回事?还有更多 - 在这种情况下如何适当地限制线程?
我的代码片段产生了问题:
foreach (string fi in files)
{
if (_shouldStop)
{
break;
}
lock (_workItems)
{
StatusString = string.Format("Examining file Dir={0}\nmask={1}\nfile={2}\nqueue={3}",
root, mask, fi, _workItems.Count);
}
lock (_workItems)
{
if (!_workItems.Contains(fi))
{
if (!File.Exists(TargetForFile(fi + ".hash")))
{
StatusString = string.Format("Adding file Dir={0}\nmask={1}\nfile={2}\nqueue={3}",
root, mask, fi, _workItems.Count);
_workItems.Add(fi);
}
}
}
Thread.Sleep(10);
}
Run Code Online (Sandbox Code Playgroud)
小更新:
Sleep(1000)
当代码作为Windows服务运行并且没有人连接到机器时,即使没有.我正式宣布它为WTF.
别睡觉 将线程优先级设置为IDLE.
接下来要确定每个进程的CPU消耗,因此不要追逐红鲱鱼.打开Perfmom.exe并查看Process(*)\(*)
对象(所有实例).然后你可以检查% Processor Time
和% User Time
每一个过程,并确定使用18%谁是当RDP被关闭.
作为旁注,而不是shuffling same directories over and over again
,为什么不使用更改通知机制呢?