Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2023, 20:13   #1
MartG
Новичок
Джуниор
 
Регистрация: 28.01.2023
Сообщений: 3
По умолчанию Проблемы с памятью в TStringList

LS := TStringList.Create; //Создал СтрингГрид
LS.LoadFromFile(NF); //Гружу файл в СтрингЛист 6000 или 12000 строк

// обрабатываю

LS.SaveToFile(NF); //Сохранил в файл 6000 строк
LS.Free; //Убил СтрингЛист

// после некоторых действий может возникнуть необходимость
// добавить ещё 6000 строк, то делаю
LS := TStringList.Create; //Создал СтрингГрид
LS.LoadFromFile(NF); //Гружу файл в СтрингЛист строк

// добавляю 6000 строк

LS.SaveToFile(NF); //Сохранил в файл 6000 строк
LS.Free; //Убил СтрингЛист
//**

Но добавить 6000 строк не могу.
Только где-то 20% и вылетает ошибка CPU: похоже с памятью
MartG вне форума Ответить с цитированием
Старый 28.01.2023, 20:22   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А обязательно с файлами работать именно через TStringList. Может стоит использовать обычные функции работы с текстовыми файлами. Это и память сэкономит.

Уточняющий вопрос. 6000 строк добавляются в произвольные индексы или в конец списка?
Если в конец, тогда естественно лучше использовать обычный append.

Как вариант, если файл умещается в памяти, то вы можете выделить для него один линейный блок памяти через VirtualAlloc и самостоятельно найти начало всех строк в нем, сохраняя указатели не в TStringList, а в обычный TList. Так вы снизите нагрузку на менеджер динамически распределяемой памяти.

Последний раз редактировалось macomics; 28.01.2023 в 20:24.
macomics вне форума Ответить с цитированием
Старый 29.01.2023, 15:54   #3
MartG
Новичок
Джуниор
 
Регистрация: 28.01.2023
Сообщений: 3
По умолчанию

macomics, спасибо за ответ.

Через TStringList удобно было работать,
раньше было меньше строк и потому проблемы не было,
но теперь если проблему не решу,
то прийдется менять программу.
Везде в инете пишут о гораздо больших строках,
потому я и не задумывался об объёме.

Да, в конечном итоге в файле текст
и запись идет либо файлом, либо добавляются строки в конец файла.

Последний раз редактировалось MartG; 29.01.2023 в 15:57.
MartG вне форума Ответить с цитированием
Старый 30.01.2023, 09:42   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
LS := TStringList.Create; //Создал СтрингГрид
LS.Capacity:=6000;12000;
LS.LoadFromFile(NF); //Гружу файл в СтрингЛист 6000 или 12000 строк
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 05.02.2023, 17:12   #5
MartG
Новичок
Джуниор
 
Регистрация: 28.01.2023
Сообщений: 3
По умолчанию

evg_m

Спасибо за подсказку, как определиться с объёмом памяти

P.S.
Всем спасибо. Вопрос решен.

Последний раз редактировалось MartG; 05.02.2023 в 17:16.
MartG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отловить проблемы с памятью Kronos913 Общие вопросы Delphi 4 01.02.2022 16:37
Проблемы с оперативной памятью. XmasLord Компьютерное железо 24 11.04.2015 00:38
Проблемы с памятью Firefly Общие вопросы .NET 11 21.03.2013 11:43
Проблемы с памятью в длинной арифметике Свитозар Помощь студентам 1 27.10.2012 18:29
Проблемы с виртуальной памятью. DeKot Операционные системы общие вопросы 13 29.05.2009 11:10