![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки [D6, WinXP]
anarhi © (2004-08-06 10:52:00)
Привет всем,
проблема такая: есть файл 120 Мбайт (база данных в текстовом виде)читаю определенную часть данных провожу над ними манипуляции, записываю результат в файл, в итоги получается файл такогоже размера, на это уходит 1 час времени и процессор работает на 100%. Как разгрузить процессор и уменьшить время работы, я слышал что-то про потоки и нити а как сделать не знаю подскажите и по подробнее. О разгрузке внутреннего алгоритма речи быть не может. Система Athlon XP 1800+ RAM 384.
Smithson (2004-08-06 13:03:00) [1]Слушайте, 120 мег - это же смешно. StringList сожрет под него ну максимум 200 мег. Поставь на машину 512 Мег и работай как хочешь! (если оптимизировать не хочешь).
Мастер (2004-08-06 12:38:00) [2]Да зачем тебе все сразу загружать?
Тебе надо загружать последовательно необходимую порцию строк и обрабатывать их. После обработки выводить в другой файл.
Romkin (2004-08-06 12:37:00) [3]Абсолютно бессмысленно :)
Ты же можешь поблочно обрабатывать? Зачем извращаться?
anarhi (2004-08-06 12:35:00) [4]Загрузить в память 120 Мбайт и работать с ним как с массивом типа string.
Digitman (2004-08-06 12:33:00) [5]
> anarhi (06.08.04 12:30) [32]
> ну и как?
ты не в цирке и не в богодельне, сударь !
хочешь помощи ? излагай подробно (!!) логику, которая тебе нужна в конечном итоге !
anarhi (2004-08-06 12:30:00) [6]REA
ну и как?
REA (2004-08-06 12:29:00) [7]120Мб - маленький файл.
WondeRu (2004-08-06 12:10:00) [8]сначала, я бы все перегнал в две таблицы (по одной для каждого файла), а потом в цикле через Select писал выходной файл!
Romkin (2004-08-06 12:08:00) [9]>а как со 120 Мбайтным?
Ты его кусками читаешь? Так и читай.
Посмотри TStringList, особенно Names & Values, Sorted и тд.
Наверняка подойдет.
anarhi (2004-08-06 12:05:00) [10]WondeRu
а как со 120 Мбайтным?
anarhi (2004-08-06 12:04:00) [11]Сейчас исходников привести немогу я на работе а они дома.
WondeRu (2004-08-06 12:03:00) [12]создаешь для 2мб файла физическую таблицу (т.е в MS SQL или IB) или вирт. таблицу (TMemoryTable)! Уверяю, это поможет!
Мастер (2004-08-06 12:01:00) [13]>anarhi
Ты бы привел куски кода - как ты работаешь с файлами и как идет
работа с данными.
Romkin (2004-08-06 11:59:00) [14]НУ загнать двухметровый файл в TStringList и отсортировать - примитивно, зато как искать-то будет!
Digitman (2004-08-06 11:58:00) [15]
> Romkin © (06.08.04 11:56) [22]
ты сейчас насоветуешь ему) ... надумает загнать все 120 мб в TStringList и получит тот же отлуп , что и при GetMem(120mb)..)
Romkin (2004-08-06 11:56:00) [16]По-другому - надо брать другие структуры данных. Их полно. Например, тот же TStringList, он заточен под хранение строк
Digitman (2004-08-06 11:56:00) [17]
> anarhi (06.08.04 11:53) [16]
чего ж ты тогда лапшу вешаешь, что структурированный он у тебя ?
если нет возможности структурировать его перед обработкой, создай индексы для быстрого доступа к записям или загони исх.файл в настоящуюБД и работай уже с БД, а не с исх.файлом
anarhi (2004-08-06 11:55:00) [18]Запись ищется последовательно.
Romkin (2004-08-06 11:55:00) [19]Да скорее всего каждый раз файл заново читается :)))
http://www.delphimaster.ru/articles/dyntable/index.html
Может, таки не зря это здесь есть?
anarhi (2004-08-06 11:54:00) [20]Rokmin
да так а как по другому?