Re[7]: Загрузка процессора при опросе каталога
От: Mab Россия http://shade.msu.ru/~mab
Дата: 04.05.06 06:33
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Ну и что?


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

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

Чтобы получить меньше, нужно принудительно отдавать кванты процессорного времени (yield). Делать это можно неявно, используя объекты синхронизации, или явно, вызывая Thread.Sleep.
Загрузка процессора при опросе каталога
От: Аноним  
Дата: 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.