Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Windows
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2015, 11:46   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Торможение файловой системы

Есть скрипт который в цикле построчно обрабатывает текстовый файлы. текущий размер файлов 500-3000 строк. Файлы содержат информацию поступающую с приборов за один день (то есть за год 365 файлов).
В процессе работы выяснилась не приятная особенность, каждый последующий файл отрабатывается медленные чем предыдущий. Причем торможения начинается ориентировочно с 120 файла. Алгоритм работы про чихвостил вдоль и поперек, ошибок не нашел. Решил проверить файловую систему, поставил 15 секундную паузу между обработкой файлов. Торможение прекратилось.

Вывод: тормозит файловая система.
Вопрос: Как этого избежать? 15 сек. пауза между каждым файлом - не вариант :)

Логирование работы скрипта показала такую картину:
SqlN=1 Time: 11:01:19.982000 Strok:343 Runtime: .015000 Runtime/Strok=0.0000437317784
SqlN=365 Time: 11:09:33.137000 Strok:1707 Runtime: 4.691000 Runtime/Strok=0.00274809607

Где SqlN, порядковый номер отрабатываемого файла.
Видно что торможение составляет 62,8 раза!!

Будут ли предложения как решить проблему?

PS Пока работаю в Windows 8 64, рабочая станция работает на Windows 7 32, теоретически возможна работа на Windows XP 32.
С уважением, Алексей.

Последний раз редактировалось tae1980; 11.06.2015 в 12:25.
tae1980 вне форума Ответить с цитированием
Старый 11.06.2015, 12:00   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

15 сек. пауза на каждые ~100 файлов
Цитата:
Причем торможения начинается ориентировочно с 120 файла
А может и паузу можно сделать меньше.
Вы уверены что тормозит именно ЧТЕНИЕ файлов, а не ЗАПИСЬ ?
Чтение без сброса результатов ведь не тестировалось?
Обработанные данные ведь куда-то должны сбрасываться. БД, "сводный" файлик, ???
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.06.2015 в 12:04.
evg_m вне форума Ответить с цитированием
Старый 11.06.2015, 12:24   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
15 сек. пауза на каждые ~100 файлов
А может и паузу можно сделать меньше.
Кстати да. Можно попробовать. Такой размер паузы, был выбрал "что бы точно сработало". Так что экспериментально можно пробовать вычислить и меньший размер.
Цитата:
Сообщение от evg_m Посмотреть сообщение
Вы уверены что тормозит именно ЧТЕНИЕ файлов, а не ЗАПИСЬ ?
Исходные файлы открываются ТОЛЬКО на чтение. Причем на короткий период. Одним махом втягиваем весь файл в память, закрываем файл, и разбираем что втянули.
Цитата:
Сообщение от evg_m Посмотреть сообщение
Чтение без сброса результатов ведь не тестировалось?
Тут подробнее, плз.
Один человек посоветовал, чистить буфер, после каждого файла. Думаю как это организовать... Ни разу не делал раньше.
Цитата:
Сообщение от evg_m Посмотреть сообщение
Обработанные данные ведь куда-то должны сбрасываться. БД, "сводный" файлик, ???
Да, кидаем в сводный файл. Запись в него построчно, в конце обработки каждой строки. Закрываем файл после обработки последнего файла на чтение.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.06.2015, 12:47   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Одним махом втягиваем весь файл в память, закрываем файл, и разбираем что втянули.
получаем громадный буфер данных. А потом его освобождаем?
Цитата:
Один человек посоветовал, чистить буфер, после каждого файла. Думаю как это организовать...
если нет, то забили всю память и пока сборшик мусора не пройдет ...
Цитата:
Да, кидаем в сводный файл. Запись в него построчно, в конце обработки каждой строки.
А сводный ведь тоже висит в памяти и память эта (ее размеры и место) все время меняется. Опять ждем сборщика мусора ....

Цитата:
Цитата:
Чтение без сброса результатов ведь не тестировалось?
Тут подробнее, плз.
БЕЗ каких либо изменений сводного файла, работать тоже только на чтение.(посчитали что нужно и тут же забыли про это).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.06.2015, 14:39   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
получаем громадный буфер данных. А потом его освобождаем?
Пробовал и так и так. Если не освобождать скрипт работает даже чуть быстрее. Массив каждый раз затирается сам по себе.

Цитата:
Сообщение от evg_m Посмотреть сообщение
если нет, то забили всю память и пока сборшик мусора не пройдет ...
Пока не нашел способ принудительно очистить буфер.
Файла не большие, объем всех файлов 17Мб. Так что де же если все их одновременно загрузить, память забьется не сильно.

Цитата:
Сообщение от evg_m Посмотреть сообщение
А сводный ведь тоже висит в памяти и память эта (ее размеры и место) все время меняется. Опять ждем сборщика мусора ....
Пробовал закрывать после каждого обращения/после обработки каждого входящего файла - разницы нет.

Цитата:
Сообщение от evg_m Посмотреть сообщение
БЕЗ каких либо изменений сводного файла, работать тоже только на чтение.(посчитали что нужно и тут же забыли про это).
Была версия скрипта которая сводный файл полностью формировала в памяти, а потом писала одной командой. Вот тогда получил тормоза, так как переменная с данными для записи стала огромна.

Пробовал так же паузы от 0.1 до 1 сек в разных местах,с разной кратностью - пока безрезультатно. :((
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.06.2015, 15:43   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Спасибо, evg_m! Разобрался! Но ты не толкнул на правильную мысль.
Косяк был все таки в алгоритме. В процессе работы создавалась перемеренная в которой через пробел сохранялись ID всех строк передаваемых в результирующий файл. А так как строк боле 400 000, то столько же слов содержит и переменная. Убрал её, и время работы скрипта с 500 сек, упало до 16.
Косяк в том, что эта переменная нужна...
Попробую сохранять её данные в массив, а в конце в цикле выводить в результирующий файл по символьно.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер файловой системы nik2009nik Win Api 2 26.10.2014 09:16
Сортировка файловой системы Vadik4 Общие вопросы Delphi 1 08.06.2014 17:55
Драйвер файловой системы vedro-compota Общие вопросы C/C++ 2 26.01.2012 21:50
Устройство файловой системы Alexandr-vi-92 Операционные системы общие вопросы 2 06.11.2008 08:14