Ошибка нехватки памяти в приложении VB6 - PullRequest
2 голосов
/ 15 октября 2010

Прежде, чем кто-то скажет это, я знаю, что это не так, как это должно быть сделано, но это так, как это было сделано, и я пытаюсь поддержать это, не переписывая все это.
Уверяю вас, это далеко не худший момент.

Проблема возникает, когда приложение считывает весь файл в строковую переменную. Обычно это работает нормально, потому что файлы небольшие, но один пользователь создал файл размером 107 МБ, и он падает.

intFreeFile = FreeFile
Open strFilename For Binary Access Read As intFreeFile
ReadFile = String(LOF(intFreeFile), " ")
Get intFreeFile, , ReadFile
Close intFreeFile

Теперь он не падает на линии

ReadFile = String(LOF(intFreeFile), " ")

но на

Get intFreeFile, , ReadFile

Итак, что здесь происходит, конечно, String выполнила выделение памяти, так почему бы жаловаться на нехватку памяти на Get ?

Ответы [ 3 ]

0 голосов
/ 15 октября 2010

Обычно чтение файла включает некоторую буферизацию, которая занимает место. Я предполагаю здесь, но я бы посмотрел на пространство, необходимое для преобразования байтов в символы. Строки VB6 16-битные, но (двоичные) файлы 8-битные. Вам понадобится 107 МБ для содержимого файла, плюс 214 МБ для преобразованных результатов. Выделение строки только резервирует 214 МБ.

0 голосов
/ 28 февраля 2014

Я получил ту же ошибку. И мы только что проверили диспетчер задач, показывающий 100% использование ресурсов. мы узнали, что одно из приложений обновления занимало слишком много оперативной памяти, и мы просто убили его. это решило проблему для меня. Еще одна вещь, которую мы пошли в настройки конфигурации. START-> RUN-> MSCONFIG и перейдите на вкладку «Автозагрузка» и снимите флажок с приложения, которое выглядит как приложение обновления или какое-то странное приложение, которое вы не используете.

0 голосов
/ 15 октября 2010

Вам не нужен этот вызов "GET", просто удалите его, вы уже помещаете файл в строку, поэтому нет необходимости использовать вызов GET.

ReadFile = Input(LOF(intFreeFile), intFreeFile)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...