Загрузка процессора при опросе каталога
От: Аноним  
Дата: 03.05.06 11:25
Оценка:
Добрый день уважаемые гуру!
Помогите решить проблему или дайте дельный совет. Необходимо организовать передачу файлов из каталога в очередь MSMQ. Для этого создан сервис, который при старте запускает отдельный поток для просмотра содержимого каталога. После создания потока управление передается методу:

public void Test()
{
string ss = "";
DirectoryInfo dir = new DirectoryInfo(@"C:\temp");
while (abt == true)
{
FileInfo[] fil = dir.GetFiles();
foreach (FileInfo f in fil)
{
ss = f.Name;
}
}
}
И вот этот простенький пример грузит процессор на 97%-100%, это при том, что нет никакой дополнительной логики обработки.

Вопрос:
Как можно снизить нагрузку на процессор при опросе каталога?
Может я написал неверный алгоритм опроса?
Re: Загрузка процессора при опросе каталога
От: memorilik  
Дата: 03.05.06 11:39
Оценка:
А>public void Test()
А> {
А> string ss = "";
А> DirectoryInfo dir = new DirectoryInfo(@"C:\temp");
А> while (abt == true)
А> {
А> FileInfo[] fil = dir.GetFiles();
А> foreach (FileInfo f in fil)
А> {
А> ss = f.Name;
А> }
А> }
А> }
А>И вот этот простенький пример грузит процессор на 97%-100%, это при том, что нет никакой дополнительной логики обработки.

Вставь вызов sleep(1) после foreach...
Re[2]: Загрузка процессора при опросе каталога
От: Аноним  
Дата: 03.05.06 11:58
Оценка:
Здравствуйте, memorilik, Вы писали:

M>Вставь вызов sleep(1) после foreach...


Не помогло. Процессор также полность загружен.
Re: Загрузка процессора при опросе каталога
От: Othello  
Дата: 03.05.06 12:24
Оценка:
Здравствуйте, <Аноним>, Вы писали:

используйте System.IO.FileSystemWatcher
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Загрузка процессора при опросе каталога
От: Аноним  
Дата: 03.05.06 13:18
Оценка:
Здравствуйте, Othello, Вы писали:

O>Здравствуйте, <Аноним>, Вы писали:


O>используйте System.IO.FileSystemWatcher


Я так понимаю, что таким образом можно отследить изменения в каталоге. А как быть если в момент запуска сервиса в каталоге уже есть файлы?
Re[3]: Загрузка процессора при опросе каталога
От: Lloyd Россия  
Дата: 03.05.06 13:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Я так понимаю, что таким образом можно отследить изменения в каталоге. А как быть если в момент запуска сервиса в каталоге уже есть файлы?


Сначала обработать имеющиеся файлы. После этого отслеживать тзменеия с помощью FileSystemWatcher-а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Загрузка процессора при опросе каталога
От: Othello  
Дата: 03.05.06 13:41
Оценка:
А>Я так понимаю, что таким образом можно отследить изменения в каталоге. А как быть если в момент запуска сервиса в каталоге уже есть файлы?

В момент запуска сервиса вы обрабатываете файлы из каталога 1 раз и всё. Дальше просто следите за каталогом, обрабатывая их по мере поступления.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Загрузка процессора при опросе каталога
От: Аноним  
Дата: 04.05.06 03:21
Оценка:
Здравствуйте, Othello, Вы писали:

O>В момент запуска сервиса вы обрабатываете файлы из каталога 1 раз и всё. Дальше просто следите за каталогом, обрабатывая их по мере поступления.


Спасибо за рекомендации, обязательно попробую данную технологию.
Ну а все таки, есть ли способ снизить загрузку процессора при использовании фрагмента кода указанного в самом начале переписки?
Re[5]: Загрузка процессора при опросе каталога
От: Mab Россия http://shade.msu.ru/~mab
Дата: 04.05.06 03:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ну а все таки, есть ли способ снизить загрузку процессора при использовании фрагмента кода указанного в самом начале переписки?

Там вообще бесконечный цикл написан.
Re[6]: Загрузка процессора при опросе каталога
От: Аноним  
Дата: 04.05.06 06:01
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Там вообще бесконечный цикл написан.


Ну и что? При старте сервиса запускается 5 потоков с бесконечными циклами выполняющими ту или иную функциональность. Они все вместе грузят систему на 02%. А вот при запуске цикла описанного в примере все становиться колом. Поэтому и хочется узнать в чем собственно дело, и как организовать опрос каталога с использованием GetFiles? Ожидается пополнение каталога до 50 000 сообщений в сутки. Если сейчас при холостом просмотре производиться такая нагрузка на проц, то что тогда будет при инициализации такого каталога и дополнительной логике, связанной с обработкой файлов?
Re[5]: Загрузка процессора при опросе каталога
От: Othello  
Дата: 04.05.06 06:08
Оценка:
А>Ну а все таки, есть ли способ снизить загрузку процессора при использовании фрагмента кода указанного в самом начале переписки?

Ны поставьте там Sleep(100) например... (примерно 10 раз в секунду опрашивать чтобы)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Загрузка процессора при опросе каталога
От: _FRED_ Черногория
Дата: 04.05.06 06:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вопрос:

А>Как можно снизить нагрузку на процессор при опросе каталога?
А>Может я написал неверный алгоритм опроса?

Попробуй вот такой способ:
Перебор файлов с использованием FindFirstFile/FindNextFile и итераторов C# 2.0
Автор: VladD2
Дата: 27.09.05
... << RSDN@Home 1.2.0 alpha rev. 648>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[7]: Загрузка процессора при опросе каталога
От: Mab Россия http://shade.msu.ru/~mab
Дата: 04.05.06 06:33
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Ну и что?


То, что написанный код с точки зрения нагрузки процессора эквивалентен
for (;;) ;

Надеюсь, тот факт, что здесь будет 100% загрузка, сомнений не вызывает?

Чтобы получить меньше, нужно принудительно отдавать кванты процессорного времени (yield). Делать это можно неявно, используя объекты синхронизации, или явно, вызывая Thread.Sleep.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.