Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня, размер списка TStringList ограничен MaxListSize = Maxint div 16 что составляет 134 217 727. Столкнулся со случаем когда в коде в список заносили примерно 1 300 000 строк и походу происходило переполнение по памяти. Как правильно проконтролировать сколько доступно ещё физической памяти для дальнейшего заполнения этого списка? Есть ли альтернатива TStringList которая позволяет выйти за границы физической памяти (например со свопингом на диск)? Приложение win32, delphi 10.4.1. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 09:12 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
32 может пожрать максимум 2 гига, с ухищрениями - 3. Ты быстрее в это упрешься. А своп и так автоматом применяется, если настроен в системе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 09:39 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal 32 может пожрать максимум 2 гига, с ухищрениями - 3. Ты быстрее в это упрешься. А своп и так автоматом применяется, если настроен в системе да, это понятно. Я имел ввиду может существуют списки которые работают с данными порциями, по мере обрашения к индексу списка. Потому как выход за границы (134 217 727) индекса не предполагается и проблема толко в том что TStringList пытается запихнуть в память всё сразу. Тут бы конечно во временную таблицу в базе всё запихнуть и не иметь проблем, но проект был написан ещё в 2005м и в качестве бызы выступает парадокс со всеми вытекающими. И в сушествуюшую логику впихнуть работу через таблицы будет сложно. Хотелось бы выкрутиться просто заменой TStringList. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:31 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun в список заносили примерно 1 300 000 строк и походу происходило переполнение по памяти Не понимаю при чём тут ограничение на размер списка. Ну занесли вы в него 1 млн элементов, а вам ещё доступно ~130 млн - есть ещё где развернуться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:41 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun, переполнение памяти происходит, конечно же, не из-за ограничения MaxListSize. собирай проект в 64 бита, должно помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:47 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
zedxxx hlopotun в список заносили примерно 1 300 000 строк и походу происходило переполнение по памяти Не понимаю при чём тут ограничение на размер списка. Ну занесли вы в него 1 млн элементов, а вам ещё доступно ~130 млн - есть ещё где развернуться. по длине списка ограничения нет. Я эту цифру привёл что бы показать что этого ограничения нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:49 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun zedxxx пропущено... Не понимаю при чём тут ограничение на размер списка. Ну занесли вы в него 1 млн элементов, а вам ещё доступно ~130 млн - есть ещё где развернуться. по длине списка ограничения нет. Я эту цифру привёл что бы показать что этого ограничения нет. ок, увидел, что винда 32. тогда всё печально. или база, или никак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:49 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
авторКак правильно проконтролировать сколько доступно ещё физической памяти для дальнейшего заполнения этого списка? можно пробовать отловить OOM, бывает, что это успешно получается. всё остальное еще меньше надежно. кардинально проблема решается только работой с той или иной базой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:52 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun, В таком случае, разве долго написать TStringList с SQLite3 бекэндом? Час-другой и проблема решена. Быстрее, чем на форуме ответа искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:54 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
makhaon hlopotun, переполнение памяти происходит, конечно же, не из-за ограничения MaxListSize. собирай проект в 64 бита, должно помочь. Не получится. Классы для работы с Paradox и куча других библиотек и модулей. Проект большой, уже 25 лет в разработке. Частично привязян ещё к Delphi 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:55 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
zedxxx hlopotun, В таком случае, разве долго написать TStringList с SQLite3 бекэндом? Час-другой и проблема решена. Быстрее, чем на форуме ответа искать. интересная идея, надо подумать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 10:56 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun, откуда берутся строки для StringList? Из БД, из каких-то файлов? Или ещё откуда-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 11:43 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun, нет ли в проекте большого инкрементного складывания строк? типа s := s + 'shdadhas'; s := s + '12312321' etc. Может быть просто фрагментация памяти и не возможность выделения большой строки ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 12:10 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotun, Память может закончиться не столько потому, что много элементов, сколько из-за её дефрагментации, когда список заполняется поштучно и каждый Grow выделяет больший кусок памяти под элементы в новой области кучи. Попробуй сначала задать Capacity побольше, затем заполнить список, примерно так: Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 12:20 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
hlopotunЯ имел ввиду может существуют списки которые работают с данными порциями, по мере обрашения к индексу списка. Ты не поверишь, но это TTable. Просто научись с ним правильно работать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 12:38 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov hlopotunЯ имел ввиду может существуют списки которые работают с данными порциями, по мере обрашения к индексу списка. Ты не поверишь, но это TTable. Просто научись с ним правильно работать. TTable же не выгружает уже загруженные строки? Автору: можно сделать потомка от стринглиста, который бы прозрачно контролировал расход памяти и выгружал (обнулял) элементы при достижении лимита. Сложного ничего, достаточно перекрыть Insert, Delete и SetItem. Ну и определиться, по какому принципу выгружать (самое простое - при обращении к элементу N очищать все предыдущие непустые, пока общий размер не уляжется в лимит; но это только для случаев последовательного перебора. Для случайного доступа нужно использовать алгоритм вытесняющего кеша) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 13:50 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
30.06.2021 13:50, Fr0sT-Brutal пишет: > TTable же не выгружает уже загруженные строки? с чего ты взял? TTable работает с IDAPI. ему "загружать" всё на себя не нужно. любая строка ему доступна. это не клиент-сервер. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 13:54 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий 30.06.2021 13:50, Fr0sT-Brutal пишет: > TTable же не выгружает уже загруженные строки? с чего ты взял? TTable работает с IDAPI. ему "загружать" всё на себя не нужно. любая строка ему доступна. это не клиент-сервер. Давно эти времена BDE были, не помню уж. Каждую запись заново с файла считывает? Сурово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 14:41 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
30.06.2021 14:41, Fr0sT-Brutal пишет: > Давно эти времена BDE были, не помню уж. Каждую запись заново с файла считывает? Сурово. кешированием занимается ядро BDE и ОСь. TTable только обёртка над IDAPI. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 14:48 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийкешированием занимается ядро BDE и ОСь. И грид (или TDataLink?..). Поэтому от его дизайна хочется биться головой об стену. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 15:25 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
30.06.2021 15:25, Dimitry Sibiryakov пишет: > И грид (или TDataLink?..). Поэтому от его дизайна хочется биться головой об стену. насущная необходимость внедрения TDataLink в архитектуру классов VCL - для меня лично тайна великая. когда-то давно дискутировали с покойным Анатолием на сию тему, но так и не пришли к общему мнению. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 15:29 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Тогда уж лучше TClientDataset. Ему не нужна вся эта ботва. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 15:36 |
|
||
|
TStringList в Win32 и контроль выхода за границы доступной памяти
|
|||
|---|---|---|---|
|
#18+
Vlad FТогда уж лучше TClientDataset. Он память жрёт гораздо сильнее, чем TStringList, ибо точно так же не умеет сбрасывать кэш на диск. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2021, 15:46 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40080874&tid=2037212]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 285ms |
| total: | 547ms |

| 0 / 0 |
