Страницы: 1
RSS
Использование файлового потока FSO без иннициализации объекта, ведёт к утечке памяти?
 
В определённые моменты работы за компьютером текстовые файлы около 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

Процедура работает нормально, но нет ли тут утечки памяти?

Изменено: Vargen - 12.04.2018 07:19:56
 
Цитата
Vargen написал:
.ReadAll
Если файлы большого размера, то лучше считывать данные построчно, а не сразу весь текст. Хотя все зависит от задачи.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Vargen написал:
можно ли делать вот так
Попробовал в цикле с файлом размером 44МБ - утечки памяти не наблюдалось (WinXP SP3).
Но копированием файла получается быстрее и с меньшим расходом памяти:
Код
Public Sub ReplaseFileContent(sFPSource$, sFPDestination$)
    With New FileSystemObject
      .GetFile(sFPSource).Copy sFPDestination, True
    End With
End Sub
Кстати, оператор
Код
FileCopy sFPSource, sFPDestination
работает медленнее и сильно шуршит диском - видимо, он использует совсем небольшой буфер.
 
Цитата
Дмитрий Щербаков написал: Если файлы большого размера, то лучше считывать данные построчно, а не сразу весь текст
Это дико долго даже с FSO. Лучше разбивать большой файл и, собирая куски ридоллом, обрабатывать их последовательно. Но... вопрос не в этом.
Изменено: Vargen - 13.04.2018 22:42:55
 
Цитата
Казанский написал:
Попробовал в цикле с файлом размером 44МБ - утечки памяти не наблюдалось (WinXP SP3).
Как проверяете?
 
Vargen, кнопка цитирования не для ответа!
 
Цитата
Vargen написал:
Как проверяете?
Запустил в цикле 100 раз и наблюдал за графиком количества занятой памяти в Диспетчере задач.
 
Цитата
Vargen написал:
Это дико долго даже с FSO
Не согласен,зависит от самого алгоритма обработки.
В этом заказе входной файл имел 3 млн строк на 260 столбцов, данные сравнивались с другим файлом.
Читал построчно, обрабатывал, писал в другой файл.50 метров оперативки и менее 5 минут работы макроса.
Страницы: 1
Наверх