Восемь лет спустя
kv75
дневник заведен 05-10-2003
постоянные читатели [82]
закладки:
цитатник:
дневник:
местожительство:
Москва, Россия
интересы [13]
шахматы, грибы, Пратчетт, Иваси, Morrowind, Guild Wars
[1] 08-05-2008 07:37
Альпы

[Print]
Элизабет
Пятница, 2 Апреля 2004 г.
12:28 Заполнение таблицы
Очень приятно ощущать себя не полным идиотом.

Вчера вечером я упомянул о сортировке этого огромного объема данных. Но начинать, как выяснилось, надо было не с этого, а с несколько более сложной (в плане обдумывания, а не в алгоритмическом плане) задачи.

Итак, пишем программу на Дельфи для работы с таблицами в 200 тысяч строк и 40 столбцов. Конечно, в большинстве случаев файлы будут меньше, но такие тоже встречаются.

Помещаем на форму стандартный компонент TStringGrid и пишем функцию заполнения этой таблицы. Разумеется, делаем всё аккуратно, пытаясь в разумных пределах максимизировать скорость. Сначала читаем данные из файла в буферный массив TStringList, затем определяем требуемое количество строк и столбцов таблицы. Устанавливаем эти значения, после чего определяем, что в какую ячейку положить, и заполняем ячейки таблицы.

Результат совершенно обескураживающий, ибо программа не работает, заставляя Винды всё время вспоминать о наличии винчестера. Ставим проверку после каждого этапа. Чтение файла в TStringList - довольно быстро и без проблем. Определение и установка размеров таблицы - аналогично. Заполнение таблицы - висим...

Берём маленький файлик (вместо 200 тысяч - 30 тысяч строк). Всё проходит довольно быстро, этап заполнения таблицы (там ещё парсинг простенький есть - деление на поля, не надо забывать) длится порядка 10 секунд, остальные - порядка секунды. Меняем программу таким образом, чтобы она заполняла одну и ту же "маленькую" таблицу подряд одними и теми же значениями десять раз - с каждым разом заполнение происходит всё дольше, на седьмом проходе висим окончательно...

Значит, дело не в размере таблицы (ну или не только в этом), но и в какой-то утечке памяти. Ближе к вечеру напишу решение, а пока подумайте сами, где происходит эта утечка и как её избежать.

Подсказка номер 1.

Решение.
Закрыть