Очень приятно ощущать себя не полным идиотом.
Вчера вечером я упомянул о сортировке этого огромного объема данных. Но начинать, как выяснилось, надо было не с этого, а с несколько более сложной (в плане обдумывания, а не в алгоритмическом плане) задачи.
Итак, пишем программу на Дельфи для работы с таблицами в 200 тысяч строк и 40 столбцов. Конечно, в большинстве случаев файлы будут меньше, но такие тоже встречаются.
Помещаем на форму стандартный компонент TStringGrid и пишем функцию заполнения этой таблицы. Разумеется, делаем всё аккуратно, пытаясь в разумных пределах максимизировать скорость. Сначала читаем данные из файла в буферный массив TStringList, затем определяем требуемое количество строк и столбцов таблицы. Устанавливаем эти значения, после чего определяем, что в какую ячейку положить, и заполняем ячейки таблицы.
Результат совершенно обескураживающий, ибо программа не работает, заставляя Винды всё время вспоминать о наличии винчестера. Ставим проверку после каждого этапа. Чтение файла в TStringList - довольно быстро и без проблем. Определение и установка размеров таблицы - аналогично. Заполнение таблицы - висим...
Берём маленький файлик (вместо 200 тысяч - 30 тысяч строк). Всё проходит довольно быстро, этап заполнения таблицы (там ещё парсинг простенький есть - деление на поля, не надо забывать) длится порядка 10 секунд, остальные - порядка секунды. Меняем программу таким образом, чтобы она заполняла одну и ту же "маленькую" таблицу подряд одними и теми же значениями десять раз - с каждым разом заполнение происходит всё дольше, на седьмом проходе висим окончательно...
Значит, дело не в размере таблицы (ну или не только в этом), но и в какой-то утечке памяти. Ближе к вечеру напишу решение, а пока подумайте сами, где происходит эта утечка и как её избежать.
Подсказка номер 1.
Решение.
Я жив
[Print]
kv75