|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun Короче проще переписать нежели выделить и в х64 перекомпилить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:46 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Gallemar hlopotun формат заточенный на обмена товарными артиклями, их группами, ценами на них и скидками. Выглядит то он как?... обычный файл с разделителями, каждая срока имеет свой тип, количество полей итп со всякой вложенностью итп немного напоминает IDE но попроще тогоже PRICAT ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:50 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Gallemar А подводный камень будет такой - временные таблицы будут скидыватся на диск в %FIREBIRD_TMP% , если эта переменная не переопеределена по умолчанию, то в Windows возможна нехватка места на системном диске и последующие проблемы. спасибо, тогда примерно понятна логика работы FB со временными таблицами. С FIREBIRD_TMP проблема не большая, софт имеет инсталлятор который может её создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:55 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun С FIREBIRD_TMP проблема не большая, софт имеет инсталлятор который может её создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:57 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun,FIREBIRD_TMP будет на сервере! Не на клиентской стороне. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:57 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotunвыше уже написал, что в память не лезет уже сам индекх позволяющий позиционироваться в этих файлах. "Не верю!" (с) Каков размер ключа и в какую структуру этот индекс складывается? hlopotunобычный файл с разделителями, каждая срока имеет свой тип, количество полей итп со всякой вложенностью итп немного напоминает IDE но попроще тогоже PRICAT Так прыгать-то зачем? Импортируй во временные таблицы сразу по мере чтения. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 13:01 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, дык он вроде это и хотел сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 13:02 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Симонов Денисдык он вроде это и хотел сделать Вроде, конечно, это, но кто ж его точно знает, вопросы-то у него странные, что здесь, что в Рустамовском загончике... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 13:10 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Только вот в базе разбирать будет на два порядка медленнее, чем в памяти =) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 15:45 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Siemargl, ошибаешься. Если тупо парсить то да медленнее. Если из GTT раскидывать по другим таблицам, то однозначно быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 15:58 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hlopotunвыше уже написал, что в память не лезет уже сам индекх позволяющий позиционироваться в этих файлах. "Не верю!" (с) Каков размер ключа и в какую структуру этот индекс складывается? hlopotunобычный файл с разделителями, каждая срока имеет свой тип, количество полей итп со всякой вложенностью итп немного напоминает IDE но попроще тогоже PRICAT Так прыгать-то зачем? Импортируй во временные таблицы сразу по мере чтения. Размер самого ключа не мерял, мерял использование памяти всей программой в процессе импорта этой процедурой: delphi function _CurrentProcessMemory: Cardinal; var MemCounters: TProcessMemoryCounters; begin MemCounters.cb := SizeOf(MemCounters); if GetProcessMemoryInfo(GetCurrentProcess, @MemCounters, SizeOf(MemCounters)) then Result := MemCounters.WorkingSetSize + MemCounters.PagefileUsage else RaiseLastOSError; end; до момента получения сообщения "Out of memory". Ключ составной, пихается в разные свойства одного из обьектов, которые в свою очередь являются массивами объектов. В итоге это приводит к тому что если грубо то объём используемой памяти на одну запись увеличивается в 2-3 раза в сравнеии с размером самой записи в файле. В ключ пихается много чего, потом проводится пересорторовка данных итп. Сначала думал где утечки памяти есть, но проверил в процессе импорта этой процедурой через FastMM: delphi function _CurrentProcessMemory: Cardinal; var MemCounters: TProcessMemoryCounters; begin MemCounters.cb := SizeOf(MemCounters); if GetProcessMemoryInfo(GetCurrentProcess, @MemCounters, SizeOf(MemCounters)) then Result := MemCounters.WorkingSetSize + MemCounters.PagefileUsage else RaiseLastOSError; end; и утечек не обнаружил. Код большой и сложный, яркий пример того как ненадо делать такой импорт. По сути автор попробовал реализовать свою базу с индексом и частично данными в памяти где всё парсит и потом запихивает всё в базу которая в одних версиях ещё парадоксовая а в других firebird. Собственно отсюда и все проблемы. Но код работает на файлах приемлемого размера (до 600 Мб примерно). По любому прийдётся всё переписывать. От парадокса скорее всего уже отказываться (лишний аргумент клиентам переходить на новую версию). И да, пихать сразу всё во временные таблицы и от туда уже раскидывать дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 10:27 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
Gallemar hlopotun,FIREBIRD_TMP будет на сервере! Не на клиентской стороне. инсталляция и ведётся на сервере. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 10:31 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun Предведущая версия софта что это делает (написанная ещё в 2005м) наткнулась на проблемы с памятью при импорте больших файлов в этом году. Начиная примерно от 10 млн строк софт вываливается примерно на 80% зачитывания данных с "Out of memory". Была такая же ситуация лет 5-7 назад. 32-битная утилита, занимавшаяся обработкой справочников ФИАС в формате DBF после очередного обновления этих справочников "захлебнулась". PE-флаг IMAGE_FILE_LARGE_ADDRESS_AWARE флаг спас и с тех пор всё работает как и прежде без разбора чужого кода или написания нового. Флаг можно поставить любым HEХ-редактором, а если есть исходники, добавить дефайн для линкера. Например, в Delphi это {$SETPEFLAGS $20}. Флаг дает полуторократный прирост адресного пространства, а вам не хватает где-то 20%, так что он должен помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 11:53 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
ggreggory hlopotun Предведущая версия софта что это делает (написанная ещё в 2005м) наткнулась на проблемы с памятью при импорте больших файлов в этом году. Начиная примерно от 10 млн строк софт вываливается примерно на 80% зачитывания данных с "Out of memory". Была такая же ситуация лет 5-7 назад. 32-битная утилита, занимавшаяся обработкой справочников ФИАС в формате DBF после очередного обновления этих справочников "захлебнулась". PE-флаг IMAGE_FILE_LARGE_ADDRESS_AWARE флаг спас и с тех пор всё работает как и прежде без разбора чужого кода или написания нового. Флаг можно поставить любым HEХ-редактором, а если есть исходники, добавить дефайн для линкера. Например, в Delphi это {$SETPEFLAGS $20}. Флаг дает полуторократный прирост адресного пространства, а вам не хватает где-то 20%, так что он должен помочь. спасибо огромное! проверю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 12:02 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
hlopotun Сначала думал где утечки памяти есть, но проверил в процессе импорта этой процедурой через FastMM: delphi function _CurrentProcessMemory: Cardinal; var MemCounters: TProcessMemoryCounters; begin MemCounters.cb := SizeOf(MemCounters); if GetProcessMemoryInfo(GetCurrentProcess, @MemCounters, SizeOf(MemCounters)) then Result := MemCounters.WorkingSetSize + MemCounters.PagefileUsage else RaiseLastOSError; end; и утечек не обнаружил. FastMM всего-то позволяет выяснить, вся ли память освободилась при завершении приложения. Если ты бездумно хапашь память, а освобождается лишь в самом конце - FastMM ничего не скажет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 12:28 |
|
Временные таблицы ,мусор и подводные камни
|
|||
---|---|---|---|
#18+
ъъъъъ hlopotun Сначала думал где утечки памяти есть, но проверил в процессе импорта этой процедурой через FastMM: пропущено... и утечек не обнаружил. FastMM всего-то позволяет выяснить, вся ли память освободилась при завершении приложения. Если ты бездумно хапашь память, а освобождается лишь в самом конце - FastMM ничего не скажет. указанная выше процедура как раз и посволяла проверять выделение и освобождение в ходе каждой итерации импорта. Проверка при завершении приложения давно включена но не об ней речь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 12:32 |
|
|
start [/forum/topic.php?fid=40&msg=40084339&tid=1559985]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 272ms |
total: | 399ms |
0 / 0 |