Прежде всего, размер массива VB6 можно изменить только до максимум 2 147 483 647 элементов.Однако, поскольку это также верхний предел Long
в VB6, кажется, что это вряд ли проблема.Тем не менее, даже несмотря на то, что может быть разрешено сделать массив таким большим, он работает в 32-разрядном процессе, поэтому он все еще ограничен 2 ГБ адресуемой памяти для всего процесса.Поскольку во время выполнения VB6 есть некоторые накладные расходы, он использует часть этой памяти для других целей, и, поскольку ваша программа, вероятно, выполняет и другие задачи, она также будет использовать некоторое количество памяти.
В дополнение к этому, при создании массива система должна найти это число байтов непрерывной памяти.Таким образом, даже при наличии достаточного объема памяти, в пределах 2 ГБ, если он достаточно фрагментирован, вы все равно можете получить ошибки памяти.По этой причине создание гигантских массивов всегда является проблемой.
Далее вы используете ReDim Preserve
, для которого требуется вдвое больше памяти.Когда вы изменяете размер массива таким образом, то на самом деле под капотом он создает второй массив нового размера, а затем копирует все остальные данные из старого массива в новый.Как только он закончит копирование всех данных из исходного массива, он может затем удалить его, но пока он выполняет копирование, ему необходимо одновременно хранить и старый массив, и новый массив в памяти.Это означает, что в лучшем случае, даже если бы не было другой выделенной памяти или фрагментации, максимальный размер памяти массива, который вы могли бы изменить, был бы 1 ГБ.
Наконец, в вашем примере вы никогда не показываликакой тип данных массива был.Я думаю, что если это массив байтов, вы должны быть хороши (где объем памяти массива будет лишь немного больше, чем его длина в элементах).Однако, если, например, это массив строк или вариантов, то я полагаю, что для этого потребуется минимум 4 байта на элемент, что увеличит объем памяти массива более чем в четыре раза.