У меня странная ситуация с моим веб-сервисом.
Это простой - он создает поток, который работает постоянно, выполняет некоторые проверки диска в фоновом режиме и для каждого выполняемого им File.Exists., он переходит в Sleep (10), поэтому он не потребляет ВСЕ ядра процессора.
Все работает хорошо, пока я не войду в систему из RDP.Когда я это сделаю, этот поток будет всплывать и потреблять столько, сколько сможет.
Здесь, посмотрите, посмотрите ...
У меня два ядра, и мое приложение на переднем плане используетоколо 18% CPU (что показано на NOW-метре).Слева - загрузка процессора, когда никто не вошел в систему.
Что происходит?И еще - что нужно сделать, чтобы должным образом регулировать поток в этих условиях?
Мой фрагмент кода, который вызывает проблему:
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);
}
Небольшое обновление:
Даже Sleep(1000)
НИЧЕГО не делает, когда код запускается как служба Windows, и никто не подключен к машине.Я официально объявляю это WTF.