|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Выполняю импорт из текстового файла в справочник. В справочнике 5 текстовых полей. После 5-10 мин работы-сообщение об ошибке: "недостаточно памяти". За это время в цикле добавляется 19 000 +- записей. В диспетчере задач Windows у процесса 1сv8 память постоянно увеличивается, доходит до 1,5 Гб и появляется сообщение об ошибке. код программы: Текст=Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ОЕМ); Стр=Текст.ПрочитатьСтроку(); Пока СТР<>Неопределено Цикл Стр=Текст.ПрочитатьСтроку(); //обработать ЭлСпр=Справочники.Справочник1.СоздатьЭлемент(); //заполнить поля ЭлСпр.Записать(); КонецЦикла; даже без обработки строк и заполнения полей справочника память выделяется и не освобождается.Использую MsSql Server2008 r2, 1c v8.2.18.61 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 10:05 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
_Серега_, а ты на серве делаешь!? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 11:11 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Титов, а ты на серве делаешь!? А почему нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 11:36 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
javapecker, не понял вопроса! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 11:40 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Текст=Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ОЕМ); Стр=Текст.ПрочитатьСтроку(); Пока СТР<>Неопределено Цикл Стр=Текст.ПрочитатьСтроку(); КонецЦикла; Это вызывает обрушение? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 18:28 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Программист 1с, Как раз этот код и не приводит к постоянному выделению памяти. Если в цикле выполнить добавление записи-график сразу ползет вверх. ЭлСпр=Справочники.Справочник1.СоздатьЭлемент(); ЭлСпр.Записать(); Вообще, добавлять несколько миллионов записей по одной-это не правильно в принципе. В 1С есть способ пакетной загрузки данных? Типа Select...Insert Пробую решить задачу средствами MSSQL. Получается на три порядка быстрее. В 1С за 10мин 15-20 тис. записей На скл за 13 - 1.5 млн ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 10:10 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
В транзакции по 1000 записей добавляйте. Не должно вылетать. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 17:46 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
_Серега_Выполняю импорт из текстового файла в справочник. В справочнике 5 текстовых полей. После 5-10 мин работы-сообщение об ошибке: "недостаточно памяти". За это время в цикле добавляется 19 000 +- записей. В диспетчере задач Windows у процесса 1сv8 память постоянно увеличивается, доходит до 1,5 Гб и появляется сообщение об ошибке. код программы: Текст=Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ОЕМ); Стр=Текст.ПрочитатьСтроку(); Пока СТР<>Неопределено Цикл Стр=Текст.ПрочитатьСтроку(); //обработать ЭлСпр=Справочники.Справочник1.СоздатьЭлемент(); //заполнить поля ЭлСпр.Записать(); КонецЦикла; даже без обработки строк и заполнения полей справочника память выделяется и не освобождается.Использую MsSql Server2008 r2, 1c v8.2.18.61 все просто. зацикл идет и все! надо так: Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла); Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(НомерСтроки); //обработать ЭлСпр=Справочники.Справочник1.СоздатьЭлемент(); //заполнить поля ЭлСпр.Записать(); КонецЦикла; ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2014, 02:01 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
wamaco, что такое зацикл? и чем пример автора отличается от канонического написанного в хелпе? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2014, 17:43 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Программист 1сwamaco, что такое зацикл? и чем пример автора отличается от канонического написанного в хелпе? зацикл - это зацикливание цикла! Стр=Текст.ПрочитатьСтроку(); Пока СТР<>Неопределено Цикл Стр=Текст.ПрочитатьСтроку(); 2 раза читает строку... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 00:05 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
wamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 01:24 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
javapeckerwamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале.+1. Насколько я понимаю у автора просто не читается первая строка. А все остальные замечательно читаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 11:50 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Программист 1с, думаю он просто пропускает заголовки. Но вместо завершения цикла получит ошибку, обратившись через точку к переменной Неопределено. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 13:29 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
AHDPПрограммист 1с, думаю он просто пропускает заголовки. Но вместо завершения цикла получит ошибку, обратившись через точку к переменной Неопределено.Но тогда он не ругался бы об ошибке переполнение памяти. А последний элемент просто создался с пустым наименованием. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 13:56 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
На память он ругается в середине цикла. До этой ошибки он ещё не дошёл. Хотя конечно он может и дважды проверять на Неопределено, но это уже изврат. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 14:01 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
в любом случае, в этом коде память не должна отжираться. Наверное нам чего-то не договаривают. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 14:02 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
javapeckerв любом случае, в этом коде память не должна отжираться. Наверное нам чего-то не договаривают.Как вариант открытая транзакция. Либо версия платформы? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 19:27 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
javapeckerwamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале. я не сказал, что зацикливание видно в его представленном коде. я просто уверен, что пожирание памяти связано с бесконечным циклом, в куске кода, который автор не показывает! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 21:05 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
Программист 1сjavapeckerwamaco, а зацикливание то где? у автора ошибка в цикле только в том, что чтение следующей строки должно быть в конце цикла а не в начале.+1. Насколько я понимаю у автора просто не читается первая строка. А все остальные замечательно читаются. поэтому я и предложил вариант Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла); Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(НомерСтроки); //обработать ЭлСпр=Справочники.Справочник1.СоздатьЭлемент(); //заполнить поля ЭлСпр.Записать(); КонецЦикла; он понятнее и исключает потенциальные логические ошибки новичков! ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 21:07 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
wamaco, он понятнее и исключает потенциальные логические ошибки новичков!Понятнее - это субъективно. А вот то что исключает ошибки это верно - кроме этих двух строчек других ошибок и не надоТекст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла); 3 гига в память попробуем загнать сразу, и даже до цикла не дойдем). Да и бесконечный цикл вовсе не означает утечку памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2014, 23:37 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
javapeckerwamaco, Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла); 3 гига в память попробуем загнать сразу, и даже до цикла не дойдем). Да и бесконечный цикл вовсе не означает утечку памяти. строчка Текст.Прочитать(ИмяФайла); - не означает, что мы "загоняем" все 3 Гига в память! "Бесконечный цикл вовсе не означает утечку памяти." - полностью согласен! Но у 1С это так! Попробуйте сделать бесконечный цикл и посмотрите Диспетчер задач, как растет объем используемой памяти! Это сугубо эксперимент. Почему так, не хочу даже понимать и разбираться! Поэтому и предположил такой расклад! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2014, 01:48 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
wamaco, нифига подобного у 1С не всегда это так!!! я рекурсией рассчитываю себестоимость память как была на одном уровне так и осталась! мне кажется что здесь проблема кроется в переменной СТР автора где-то что-то в обработке он накосячил. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2014, 06:23 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
wamaco,строчка Текст.Прочитать(ИмяФайла); - не означает, что мы "загоняем" все 3 Гига в память! Очень интересно, что же это по вашему означает. Попробуйте сделать бесконечный цикл и посмотрите Диспетчер задач, как растет объем используемой памяти! Это сугубо эксперимент Я то как раз пробовал, и справку читал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2014, 10:29 |
|
Недостаточно памяти при выполнении импорта текстового файла большого размера (3 ГБ)
|
|||
---|---|---|---|
#18+
а вычленить что конкретно вызывает утечку удалось? чтение файла или создание запись элементов? первое можно вычленить из списка подозреваемых заменив на чтение через fso ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2014, 10:29 |
|
|
start [/forum/topic.php?fid=28&msg=38821832&tid=1519225]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
176ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 346ms |
total: | 627ms |
0 / 0 |