Не хватает памяти (OUT OF MEMORY) при переносе данных из 7.7

Увеличение используемой памяти для 1С: 7.7

   Как известно, 7ая версия 1С не может использовать больше 2ГБ оперативной памяти (на практике 1.7ГБ). Поэтому мы можем наблюдать такую ошибку:

.

Можно выгружать по частям, но это увеличивает время, которое придется потратить на перенос. Можно увеличить используемую память для 32х приложений. Для этого в командной строке нужно ввести команду:

BCDEdit /set increaseuserva 3072

Где 3072 количество памяти (По умолчанию 2ГБ) Рекомендуется использовать значения от 2ГБ до 3ГБ. 

Но этого недостаточно, чтобы наша горячо любимая 7ка заработала как нам надо. Дело в том, что в приложение 7ки не зашита возможность использовать больше 1.7ГБ памяти. А именно при компиляции не был включен ключ LARGEADDRESSAWARE:YES. Программа, собранная с ключом /LARGEADDRESSAWARE:YES, может выделять до 3ГБ памяти, если 32х операционная система Windows. Так вот, эта же 32х программа, запущенная на 64х системе, может выделить почти 4ГБ памяти (на практике около 3.5ГБ). 

Таким образом мы можем увеличить используемую память чуть более чем в два раза, если зашьем в наш EXE этот ключ. 

Для этого нам понадобится editbin.exe. Он есть в составе Microsoft Visual Studio, либо в MASM

Я использовал MASM, поэтому дальше на его примере. После установки берем наш EXE файл 7ки переносим в папку masm32in. После чего запускаем командную строку от имени администратор.

И вводим последовательно две команды:

cd ВашПутьmasm32in

editbin /LARGEADDRESSAWARE c:1cv7s.exe

После чего возвращаем EXE на его законное место. 

На личной практике увеличил используемую память при выгрузке с 1.7ГБ до 2.4ГБ. Также можно использовать при других операциях, связанных с этой ошибкой.

11 Comments

  1. kauksi

    Эх где вы были в 2009м… эта хрень заствила меня изучить обмен через OLE.. работает в 20 раз быстрее чем выгрузка-загрузка через XML

    Reply
  2. webester

    (1) Как бы это… нарушение там лицензионного соглашения и все такое… не?

    Reply
  3. serg_infostart

    В январе-феврале 2016 на это наткнулся… Жаль не знал… Потратил бы не неделю, а день-два.

    Полезная информация, когда работа связана с такой благой целью — перевод из 7-ки на 8-ку.

    Reply
  4. sdf1979

    Вот тут проще http://infostart.ru/public/15364/

    Reply
  5. Абыр

    (4)Плагин romix’а позволяет выгрузить здоровый xml из 7.7 при переносе данных КДшными правилами?

    Reply
  6. dadel70

    Столкнулся при переносе из 8.2 в 8.3

    Хранилище файлов в базе было и было большим. В итоге обработку сделал по выгрузке файлов в внешний том и так перенес. А ошибку не победил.

    P.S. Клиенты в базе, помимо документов, даже видеозаписи хранили….

    Reply
  7. CheBurator

    (5) нет

    Reply
  8. CheBurator

    (4) это немножко не то. это для выгрузки бэкапов. то есть тупо объем базы.

    а при выгрузке обменов — объем обмена не есть объем базы.

    Reply
  9. CheBurator

    (5) проблема большого иксемеля может быть, напрмер:

    — проблема самого иксемеля, не связанная с 1ской.

    — проблема формирования исходных данных для иксемеля — например ахрененный запрос или ТЗ куда складируется весь предполагаемый вывод в файл обмена. сожралась оператива, 1ска рухнула. ибо не надо обнимать необъятное. Если прочитали -выгрузили-прочитали-выгрузили — объем памяти, потребялемый 1ской — минимален. Но это. возможно. не поддерживается типовой кработой КД-шных выгрузок. а сами мы писать обмен — не умеем…

    Reply
  10. Touh_Of_soul)

    Мне этот метод помог тогда очень хорошо..

    Reply
  11. koshak84

    Ого! Супер! Спасибо. Иногда в работе приходится использовать универсальный обмен данными, при этом бывает что выгружаются файлы большого объема. И чтобы избежать этой ошибки модифицировал обработку выгрузки таким образом, чтобы данные выгружались частями. Но ваше решение более простое. Еще раз спасибо за решение.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *