Я работаю над проектом, в котором я собираю данные из больших текстовых файлов, размером от 200 МБ до 1,5 ГБ. Сейчас я тестирую это с файлом размером 200 МБ. Если я использую объект файловой системы и читаю файлы построчно, процесс занимает более часа. Так что, пытаясь ускорить процесс, я обнаружил, что чтение файлов в длинную строку, затем разделение на заданные c заголовки, затем, в свою очередь, разделение каждого индекса этого массива по строкам и итерация по строкам уменьшают общее чтение Время около минуты. Огромный прирост производительности! Проблема в том, что процесс работает только при первом запуске. Любые последующие запуски вызывают ошибку «Run-time error 14»: out of string space ». Исправление заключается в том, чтобы закрыть книгу, а затем снова открыть ее. Тогда это будет работать снова, но только один раз. Чтобы обойти эту проблему, я создал временный метод, который разбивает исходный файл на несколько файлов размером около 50 МБ каждый. Затем я перебираю все файлы меньшего размера и, в свою очередь, разделяю их по заголовкам и т. Д. Теперь мой промежуточный процесс, который разбивает исходный файл, работает только в первый раз. Вот код:
entire_file = FreeFile ' .................................................. get the next FreeFile number
Open orig_path For Input As #entire_file ' ................................ open file for reading
contents = Input$(LOF(entire_file), entire_file) ' ........................ read entire file into a String
Close #entire_file ' ...................................................... close the input file, no longer needed
blocks = Split(contents, "PAGE 10000") ' .................................. split on the PAGE number
contents = "" ' ........................................................... free up memory
Ошибка происходит в строке «blocks = split», однако при наведении курсора мыши на переменную «contents» (Недостаточно памяти), поэтому я не уверен проблема в строке 'blocks = split'.
Я закрываю каждый открытый файл. Я очищаю все строковые переменные. Я устанавливаю все объекты Class в Nothing. Тем не менее, эта проблема с памятью все еще сохраняется. Я просто не могу понять способ очистки памяти, чтобы метод можно было запускать более одного раза. Я пропустил какие-либо другие подходящие данные, которые могли бы помочь диагностировать это?
Я нашел несколько других сообщений, где кто-то сталкивался с той же проблемой, но не было никакого решения проблемы, или, по крайней мере, тема была закрыта до публикации решения. Большое спасибо заранее.