Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Вниз

StringList & Out of memory   Найти похожие ветки 

 
ilkz   (2007-12-27 11:31) [0]

Всем доброго времени суток!

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

В эту структуру через парсер грузится инфа из, по сути, обычного текстового файла. Все, в принципе, хорошо и все довольны....

Проблема в парсере. Пока размеры загружаемых файлов не достигают порядков нескольких десятков мегабайт: в таких случаях вылетает ошибка Out of Memory. Вся обрабатываемая информация хранится в StringList"ах, коих тоже может быть заранее неизвестно сколько и какого размера.

Вопрос, собственно, заключается в том, чтобы понять причину - откуда возникает эта ошибка? Судя по диспетчеру задач, прога при обработке больших фалов занимает более ПОЛУТОРА ГИГОВ оперативки... По-моему, тут что-то не так...
П.С.: Все СтрингЛисты после работы с ними обязательно уничтожаются (.free).

П.С: компы, на которых прога работает - 3.2ГГц/1Гб ОЗУ; 3.2ГГц 64 бит/2Гб ОЗУ, так что с памятью проблем нет.

Спасибо за помощь!


 
Сергей М. ©   (2007-12-27 11:34) [1]

Парсер у тебя не оптимальный и неэкономный, а возможно и утечки в нем имеются.
Вот и вся сказка.


 
sniknik ©   (2007-12-27 11:40) [2]

все проблемы от 17й строки и неправильной логики программирования автора, ... пока не доказано обратное.

а тут не то что доказательства, вообще полезной инфы не приведено...

хотя...
> Есть структура типа record, у которой приличное количество полей, большая часть из которых - динамические массивы.
вот это может быть тонким намеком, что пора бы занятся изучением баз данных.


 
ilkz   (2007-12-27 21:20) [3]

Хм. Вот не надо мне тут Базами тыкать. Моя задача - прочитать и обработать файл данных, который генерируется сторонней программой. А выражения неоптимальный/не экономный обоснуйте, пожалуйста. Я просил помощи, а не критики.

P.S.:
Вот примерная структура обрабатываемых строк:
>123.456 123 123 AF3 = X 123 456 UUU AB3 -100
>123.456 123 123 AF3 = X 123 456 UUU AB3 -100
.............................................
.............................................
.............................................
>123.456 123 123 AF3 = X 123 456 UUU AB3 -100
>123.456 123 123 AF3 = X 123 456 UUU AB3 -100

Таких строк может быть несколько СОТЕН тысяч, и не от меня зависит то, что они хранятся в текстовом файле. Более того, колонок может быть также до нескольких десятков.


 
ilkz   (2007-12-27 21:23) [4]

П.П.С.: Если есть знатоки, то ДЛЯ НИХ: это формат TBL-файла, описывающего временные диаграммы, генерируемые симулятором из Quartus"а.


 
Anatoly Podgoretsky ©   (2007-12-27 22:24) [5]


> Если есть знатоки,

Все равно, то что ниже.

> Парсер у тебя не оптимальный и неэкономный, а возможно и
> утечки в нем имеются.

Плюс ошибка в 17 строке.
Если ты не можешь разобраться со своим кодом, то что делать телепатам без него?


 
sniknik ©   (2007-12-27 22:46) [6]

> Я просил помощи, а не критики.
а холодильник по фотографии не отремонтируете случаем, взаимообразно?

> Вот примерная структура обрабатываемых строк:
хорошая структура... если там все так, то действительно с базами я ошибся чуток.
тут нужен только счетчик на "несколько СОТЕН тысяч"(одной int. переменной хватит) и данные одной строки, все остальное мусор, т.к. повторяются.
и так наверное для каждого массива. (какая оптимизация а?! с логикой разобрались, осталась 17я строка...)


 
Skyle ©   (2007-12-28 06:44) [7]

Скорее всего утечки в разборе строк при заполнении этих самых стринг-листов.


 
Сергей М. ©   (2007-12-28 08:26) [8]


> выражения неоптимальный/не экономный обоснуйте


Первое же подозрение падает на то, что всю эти "сотни тысяч строк" ты грузишь в стринглист целиком. С учетом приведенной структуры файла это печально.


 
sniknik ©   (2007-12-28 08:55) [9]

> С учетом приведенной структуры файла это печально.
это точно.

как сказал для приведенного достаточно сохранять одну строку + счетчик количества...
ну, как догадываюсь, автор наверняка скажет "это только пример! на самом деле строки разные!" (как всегда в общем, говорят и показывают одно, а понимать их надо по неизвестно чему), даже так, пусть разные. но! судя по тому, что выдернутые случайно 4 строки и оказались одинаковые значит повторов там много, что наводит на мысль опять о базах... (или не тыкать больше ими? даже если просто идею оттуда взять?), о небольшой нормализации данных, т.е. хранить датасет с уникальными значениями, а в основном только ссылки (короче читать про нормализацию).
оптимальность обработки/хранения при этом повысится? повысится! ведь из этих сотен тысяч, нужно будет хранить/обрабатывать всего, к примеру, одну тысячу...


 
Сергей М. ©   (2007-12-28 09:05) [10]


> sniknik ©   (28.12.07 08:55) [9]


Можно и традиционным для таких задач (парсинга, имеется ввиду) regexpr-движком обойтись. Городить огород с собственным парсингом при таких навскидку тривиальных условиях нет никакого резона.


 
Правльный_Вася   (2007-12-28 10:25) [11]


> Вот не надо мне тут Базами тыкать. Моя задача - прочитать
> и обработать файл данных

читать можно построчно
а для обработки складывать в промежуточные таблицы БД, а не какие-то левые рекорды с динамическими массивами


 
Sapersky   (2007-12-28 20:33) [12]

Есть структура типа record, у которой приличное количество полей, большая часть из которых - динамические массивы.
[...]
Пока размеры загружаемых файлов не достигают порядков нескольких десятков мегабайт: в таких случаях вылетает ошибка Out of Memory.


SetLength(Array, Length(Array)+1)?


 
Amoeba ©   (2007-12-28 21:36) [13]

Если

> Таких строк может быть несколько СОТЕН тысяч

+ несколько СОТЕН тысяч выполняется такое: SetLength(Array, Length(Array)+1)
то известный результат будет налицо.

Похоже, что телепатор у
> Sapersky   (28.12.07 20:33) [12]

сработал. Будем ждать автора вопроса.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
15-1197973347
Начинающий
2007-12-18 13:22
2008.01.27
Посоветуйте хорошую книгу по delphi для начинающего..


3-1190618612
MZ
2007-09-24 11:23
2008.01.27
Узнать количество измененных записей


2-1197266998
Evgenyy
2007-12-10 09:09
2008.01.27
TMemoryStream - копировать, сохранить


2-1198611275
Kuvalda
2007-12-25 22:34
2008.01.27
Увеличение на единицу!


15-1197716283
No_Dead
2007-12-15 13:58
2008.01.27
Сбой какой-то





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский