На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Windows, ФОРТРАН: рост количества дескрипторов при работе с файлами , Дескрипторы процесса удаляются не полностью даже при закрытии файла.
      Открытие файла (open (...)) образует 2 или 3 дескриптора, закрытие (close(...)) удаляет только один.
      Функция GETFILEINFOQQ (...), кстати, тоже добавляет один дескриптор, который остаётся висеть в процессе.
      Таким образом, если идёт интенсивная работа с файлами, то дескрипторы (особенно open/close), то количество дескрипторов лавинообразно растёт (до сотен тысяч), и это быстро приводит к нехватке ресурсов.
      Кто-нибуди сталкивался с такой проблемой? Можно ли принудительно закрывать неиспользуемые дескрипторы?
        Какой компилятор?
          Цитата ValterG @
          Какой компилятор?

          Intel Visual Fortran Compiler 11.1.038
          Сообщение отредактировано: vlad2 -
            На такие проблемы в фортране как-то не обращал внимание. В основном делал расчеты, а там - открыть пару десятков файлов, рассчитать и закрыть. Т.е. максимум до 200 дескрипторов. Это не критично нынче. А если такая проблема, то используй Win API.
              Спасибо, NetVir.
              Проблему с GETFILEINFOQQ решили: её надо вызывать два раза, второй - с хэндлом, полученным после первого прохождения, при этом открытый дескриптор закрывается. Как выяснилось, именно эта функция, вызываемая тысячи раз, приводила к росту дескрипторов. Накопление дескрипторов после open/close не очень существенно: вцелом, при большом количестве этих операций они не растут лавинообразно, вероятно, с течением времени неиспользующиеся дескрипторы ОС закрывает сама.
                по идее close должен освобождать дескриптор, связанный с указанным ему каналом. По идее то же делает open если ему передан уже открытый канал. Видимо действительно, какая-то внутренняя оптимизация, с задержанным закрытием файлов.

                Возможно GETFILEINFOQQ имеет какой-то механизм освобождения дескрипторов, или получается, что разработчики пропустили утечку, которая даже простыми тестами выявляется.

                Возможно тут как с FindFirst, FindNext, FindClose. В однозадачной DOS на FAT12-, FAT16-разделах последняя функция была не нужна, вся информация хранилась в поисковой структуре. А в Windows вся информацию в эту структуру уже не помещается - пришлось создавать дескриптор и понадобилось его закрывать.
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0238 ]   [ 14 queries used ]   [ Generated: 14.05.24, 12:53 GMT ]