В определённые моменты работы за компьютером текстовые файлы около 60, 90 и 190 МБ при помощи FSO либо читаются, либо не читаются. А именно, вчера вечером читался только файл около 60 МБ, а сегодня после вкл/выкл компьютера прочитался и файл 190 МБ. Чтение в одном приложении осуществлялось таким образом:
Код
With New FileSystemObject
txt=.OpenTextFile(sPath).ReadAll
End With
Быть может в этом причина? Тут память используется, но принудительно не освобождается. Или не на то грешу? Ведь в течение дня я наталкивался на ошибки с процедурами, где использовался тот же FSO, и порой прерывал работу макросов с помощью диспетчера задач. Может быть в этом собака зарылась? Или, например, можно ли делать вот так:
Код
Public Sub ReplaseFileContent(sFPSource$, sFPDestination$)
With New FileSystemObject
.CreateTextFile(sFPDestination, True).Write .OpenTextFile(sFPSource, Forreading).ReadAll
End With
End Sub
Процедура работает нормально, но нет ли тут утечки памяти?
Попробовал в цикле с файлом размером 44МБ - утечки памяти не наблюдалось (WinXP SP3). Но копированием файла получается быстрее и с меньшим расходом памяти:
Код
Public Sub ReplaseFileContent(sFPSource$, sFPDestination$)
With New FileSystemObject
.GetFile(sFPSource).Copy sFPDestination, True
End With
End Sub
Кстати, оператор
Код
FileCopy sFPSource, sFPDestination
работает медленнее и сильно шуршит диском - видимо, он использует совсем небольшой буфер.
Не согласен,зависит от самого алгоритма обработки. В этом заказе входной файл имел 3 млн строк на 260 столбцов, данные сравнивались с другим файлом. Читал построчно, обрабатывал, писал в другой файл.50 метров оперативки и менее 5 минут работы макроса.