У меня есть проект, который сканирует большой файл (2,5 ГБ), выбирая строки, которые затем будут записаны в некоторое подмножество из нескольких сотен файлов.
Было бы быстрее всего использовать обычные записи с буферизацией, но
- Я беспокоюсь о том, что закончатся дескрипторы файлов.
- Я хочу иметь возможность наблюдать за ходом файлов во время их записи.
- Я бы предпочел как можно меньше потерь, если процесс будет прерван. Неполные файлы все еще частично полезны.
Поэтому вместо этого я открываю в режиме чтения/записи, добавляю новую строку и снова закрываю.
Большую часть времени это было достаточно быстро, но я обнаружил, что в некоторых ОС такое поведение является серьезной пессимизацией. В прошлый раз, когда я запускал его на своем нетбуке с Windows 7, я прервал его через несколько дней!
Я могу реализовать какой-нибудь менеджер файловых дескрипторов MRU, который держит так много файлов открытыми и каждый из них сбрасывает после стольких операций записи. Но разве это перебор?
Должно быть, это обычная ситуация. Есть ли "лучшая практика", "шаблон"?
Текущая реализация написана на Perl и работает на Linux, Solaris и Windows, от нетбуков до phat-серверов. Но меня интересует общая проблема: независимая от языка и кроссплатформенная. Я думаю написать следующую версию на C или node.js.