Гость
Форумы / [игнор отключен] [закрыт для гостей] / Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ) / 25 сообщений из 27, страница 1 из 2
28.11.2014, 10:05
    #38819080
_Серега_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Выполняю импорт из текстового файла в справочник. В справочнике 5 текстовых полей.
После 5-10 мин работы-сообщение об ошибке: "недостаточно памяти". За это время в цикле добавляется 19 000 +- записей. В диспетчере задач Windows у процесса 1сv8 память постоянно увеличивается, доходит до 1,5 Гб и появляется сообщение об ошибке.
код программы:

Текст=Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ОЕМ);
Стр=Текст.ПрочитатьСтроку();
Пока СТР<>Неопределено Цикл
Стр=Текст.ПрочитатьСтроку();

//обработать
ЭлСпр=Справочники.Справочник1.СоздатьЭлемент();
//заполнить поля
ЭлСпр.Записать();
КонецЦикла;



даже без обработки строк и заполнения полей справочника память выделяется и не освобождается.Использую MsSql Server2008 r2, 1c v8.2.18.61
...
Рейтинг: 0 / 0
28.11.2014, 11:11
    #38819191
Титов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
_Серега_,

а ты на серве делаешь!?
...
Рейтинг: 0 / 0
28.11.2014, 11:36
    #38819254
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Титов, а ты на серве делаешь!? А почему нет?
...
Рейтинг: 0 / 0
28.11.2014, 11:40
    #38819260
Титов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
javapecker,

не понял вопроса!
...
Рейтинг: 0 / 0
28.11.2014, 18:28
    #38819919
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Текст=Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ОЕМ);
Стр=Текст.ПрочитатьСтроку();
Пока СТР<>Неопределено Цикл
Стр=Текст.ПрочитатьСтроку();
КонецЦикла;


Это вызывает обрушение?
...
Рейтинг: 0 / 0
29.11.2014, 10:10
    #38820184
_Серега_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Программист 1с,

Как раз этот код и не приводит к постоянному выделению памяти.
Если в цикле выполнить добавление записи-график сразу ползет вверх.

ЭлСпр=Справочники.Справочник1.СоздатьЭлемент();
ЭлСпр.Записать();

Вообще, добавлять несколько миллионов записей по одной-это не правильно в принципе. В 1С есть способ пакетной загрузки данных?
Типа Select...Insert

Пробую решить задачу средствами MSSQL. Получается на три порядка быстрее.
В 1С за 10мин 15-20 тис. записей
На скл за 13 - 1.5 млн
...
Рейтинг: 0 / 0
29.11.2014, 17:46
    #38820324
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
В транзакции по 1000 записей добавляйте. Не должно вылетать.
...
Рейтинг: 0 / 0
30.11.2014, 02:01
    #38820510
wamaco
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
_Серега_Выполняю импорт из текстового файла в справочник. В справочнике 5 текстовых полей.
После 5-10 мин работы-сообщение об ошибке: "недостаточно памяти". За это время в цикле добавляется 19 000 +- записей. В диспетчере задач Windows у процесса 1сv8 память постоянно увеличивается, доходит до 1,5 Гб и появляется сообщение об ошибке.
код программы:

Текст=Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ОЕМ);
Стр=Текст.ПрочитатьСтроку();
Пока СТР<>Неопределено Цикл
Стр=Текст.ПрочитатьСтроку();

//обработать
ЭлСпр=Справочники.Справочник1.СоздатьЭлемент();
//заполнить поля
ЭлСпр.Записать();
КонецЦикла;



даже без обработки строк и заполнения полей справочника память выделяется и не освобождается.Использую MsSql Server2008 r2, 1c v8.2.18.61

все просто. зацикл идет и все!
надо так:

Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);

Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
//обработать
ЭлСпр=Справочники.Справочник1.СоздатьЭлемент();
//заполнить поля
ЭлСпр.Записать();
КонецЦикла;
...
Рейтинг: 0 / 0
30.11.2014, 17:43
    #38820767
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
wamaco, что такое зацикл?

и чем пример автора отличается от канонического написанного в хелпе?
...
Рейтинг: 0 / 0
01.12.2014, 00:05
    #38820930
wamaco
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Программист 1сwamaco, что такое зацикл?

и чем пример автора отличается от канонического написанного в хелпе?

зацикл - это зацикливание цикла!

Стр=Текст.ПрочитатьСтроку();
Пока СТР<>Неопределено Цикл
Стр=Текст.ПрочитатьСтроку();

2 раза читает строку...
...
Рейтинг: 0 / 0
01.12.2014, 01:24
    #38820949
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
wamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале.
...
Рейтинг: 0 / 0
01.12.2014, 11:50
    #38821219
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
javapeckerwamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале.+1.

Насколько я понимаю у автора просто не читается первая строка. А все остальные замечательно читаются.
...
Рейтинг: 0 / 0
01.12.2014, 13:29
    #38821337
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Программист 1с,

думаю он просто пропускает заголовки. Но вместо завершения цикла получит ошибку, обратившись через точку к переменной Неопределено.
...
Рейтинг: 0 / 0
01.12.2014, 13:56
    #38821358
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
AHDPПрограммист 1с,

думаю он просто пропускает заголовки. Но вместо завершения цикла получит ошибку, обратившись через точку к переменной Неопределено.Но тогда он не ругался бы об ошибке переполнение памяти. А последний элемент просто создался с пустым наименованием.
...
Рейтинг: 0 / 0
01.12.2014, 14:01
    #38821362
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
На память он ругается в середине цикла. До этой ошибки он ещё не дошёл. Хотя конечно он может и дважды проверять на Неопределено, но это уже изврат.
...
Рейтинг: 0 / 0
01.12.2014, 14:02
    #38821364
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
в любом случае, в этом коде память не должна отжираться. Наверное нам чего-то не договаривают.
...
Рейтинг: 0 / 0
01.12.2014, 19:27
    #38821832
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
javapeckerв любом случае, в этом коде память не должна отжираться. Наверное нам чего-то не договаривают.Как вариант открытая транзакция. Либо версия платформы?
...
Рейтинг: 0 / 0
01.12.2014, 21:05
    #38821952
wamaco
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
javapeckerwamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале.

я не сказал, что зацикливание видно в его представленном коде. я просто уверен, что пожирание памяти связано
с бесконечным циклом, в куске кода, который автор не показывает!
...
Рейтинг: 0 / 0
01.12.2014, 21:07
    #38821953
wamaco
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
Программист 1сjavapeckerwamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале.+1.

Насколько я понимаю у автора просто не читается первая строка. А все остальные замечательно читаются.

поэтому я и предложил вариант

Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);

Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(НомерСтроки);
//обработать
ЭлСпр=Справочники.Справочник1.СоздатьЭлемент();
//заполнить поля
ЭлСпр.Записать();
КонецЦикла;

он понятнее и исключает потенциальные логические ошибки новичков!
...
Рейтинг: 0 / 0
01.12.2014, 23:37
    #38822047
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
wamaco,
он понятнее и исключает потенциальные логические ошибки новичков!Понятнее - это субъективно. А вот то что исключает ошибки это верно - кроме этих двух строчек других ошибок и не надоТекст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла); 3 гига в память попробуем загнать сразу, и даже до цикла не дойдем). Да и бесконечный цикл вовсе не означает утечку памяти.
...
Рейтинг: 0 / 0
02.12.2014, 01:48
    #38822083
wamaco
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
javapeckerwamaco,
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла); 3 гига в память попробуем загнать сразу, и даже до цикла не дойдем). Да и бесконечный цикл вовсе не означает утечку памяти.

строчка Текст.Прочитать(ИмяФайла); - не означает, что мы "загоняем" все 3 Гига в память!

"Бесконечный цикл вовсе не означает утечку памяти." - полностью согласен! Но у 1С это так!
Попробуйте сделать бесконечный цикл и посмотрите Диспетчер задач, как растет объем используемой памяти!
Это сугубо эксперимент. Почему так, не хочу даже понимать и разбираться!
Поэтому и предположил такой расклад!
...
Рейтинг: 0 / 0
02.12.2014, 06:23
    #38822119
Титов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
wamaco,

нифига подобного у 1С не всегда это так!!! я рекурсией рассчитываю себестоимость память как была на одном уровне так и осталась!
мне кажется что здесь проблема кроется в переменной СТР автора где-то что-то в обработке он накосячил.
...
Рейтинг: 0 / 0
02.12.2014, 10:29
    #38822243
javapecker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
wamaco,строчка Текст.Прочитать(ИмяФайла); - не означает, что мы "загоняем" все 3 Гига в память! Очень интересно, что же это по вашему означает. Попробуйте сделать бесконечный цикл и посмотрите Диспетчер задач, как растет объем используемой памяти!
Это сугубо эксперимент Я то как раз пробовал, и справку читал.
...
Рейтинг: 0 / 0
02.12.2014, 10:29
    #38822245
Последний выдох ГПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
а вычленить что конкретно вызывает утечку удалось? чтение файла или создание запись элементов?

первое можно вычленить из списка подозреваемых заменив на чтение через fso
...
Рейтинг: 0 / 0
02.12.2014, 10:34
    #38822249
Последний выдох ГПЖ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
помню были еще какие-то феньки влекущие за собой утечку но там надо было устроить "зацикливание" из кода и реквизитов формы
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ) / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]