2010-12-01 5 views
-1

Мы столкнулись с проблемой с слушателями VB.NET, которые используют высокий процессор (от 50% до 70%) на серверной машине, на которой он запущен. Слушатели используют концепцию потоковой передачи, а также мы использовали класс FileSystemWatcher, чтобы отслеживать переименование файла, указывая на одно общее местоположение. Оба являются консольными приложениями, а запланированные задания работают весь день. Не могли бы вы помочь мне узнать, как контролировать использование ЦП с этим классом FileSystemWatcher?Высокое использование ЦП - VB.NET

+1

У вас есть профайлер, чтобы узнать, куда идет время? – 2010-12-01 07:21:21

ответ

1

Все зависит от кода, в котором вы работаете.

Например, если у вас есть таймер с интервалом в 10 мс, но он работает только каждые 2 минуты, и на каждом интервале таймера вы много проверяете, для этого потребуется много CPU, чтобы ничего не делать.

Если вы используете несколько потоков, а один - в цикле, ожидая, пока второй освободит блокировку (Monitor.TryEnter()), то снова это может занять дополнительный процессор. Вы можете избежать этого, поместив ожидающий поток в Monitor.Wait(), а затем, когда занятый поток будет завершен, Monitor.Pulse().

Помимо общих рекомендаций выше, если вы публикуете ключевые части вашего кода или результаты профиля, мы можем быть в состоянии помочь больше.

Если вы ищете профилировщик, мы используем RedGates ANTS Profiler (стоимость, но с бесплатной пробной версией), и это дает хорошие результаты, я не использовал никого другого для сравнения (и я никоим образом не связан с RedGate) так что другие могут быть лучше.

Надеюсь, что это поможет.

Смежные вопросы