Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   не хватает памяти.... (http://forums.kuban.ru/f1040/ne_hvataet_pamyati-3730074.html)

ktvofffka 19.02.2013 12:41

не хватает памяти....
 
подскажите где я не прав... или это происки 1С...

есть такой код
счетчик = 0;
Пока СтрокаОстатки.Следующий() Цикл
счетчик = счетчик +1;
Если счетчик % 1000 = 0 Тогда
ЗаписатьДанные(тзПроводки, тзАналитики);
КонецЕсли;
...... заполнение ТЧ
КонецЦикла;
ЗаписатьДанные(тзПроводки, тзАналитики);



Процедура ЗаписатьДанные(тзПроводки, тзАналитики);
НаборЗаписейПроводки = регистрыСведений.Проводки.СоздатьНаборЗаписей();
НаборЗаписейПроводки.Загрузить(тзПроводки);
НаборЗаписейПроводки.Записать(Ложь);

НаборЗаписейАналитики = регистрыСведений.Аналитика.СоздатьНаборЗаписей();
НаборЗаписейАналитики.Загрузить(тзАналитики);
НаборЗаписейАналитики.Записать(Ложь);

НаборЗаписейПроводки.Очистить();
НаборЗаписейАналитики.Очистить();
НаборЗаписейПроводки = Неопределено;
НаборЗаписейАналитики = Неопределено;
тзПроводки.Очистить();
тзАналитики.Очистить();
КонецПроцедуры


непонятно.. память просто утекает... писать нужно огромный массив.. разбить не могу точнее желательно обойтись без разбиенися писать нужно порядка миллиона записей. решил писать блоками, но память утекает все равно... добавил уже очистку один фиг... стоня другая тысяч записей и все. не хватает памяти....

roma n 19.02.2013 15:09

1) Не обёрнуто ли всё это в транзакцию?
2) Откуда уверенность, что протекает при записи, а не при подготовке тзПроводки, тзАналитики к примеру?

bma1 19.02.2013 15:41

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

GSokolov 19.02.2013 22:27

Не получится ли при повторных записях блоков не создавать новые наборы записей, а использовать созданные ранее (глобально?) с предварительной очисткой?

Reaper 19.02.2013 22:29

Файловая или клиент-серверная? По условию задачи транзакция одна или допустимо несколько?

ktvofffka 20.02.2013 07:36

Файл-серверная, но работа идет в клиенте. транзакций нет. таблицы используются повторно с предварительной очисткой...
запись я провожу блоками по 1000 записей. В моем случае максимальный размер таблицы составляет 4 тысячи строк.
У меня сложилось впечатление что освобождение памяти в 1С происходит только при выходе из процедуры. Явного деструктора в 1С не хватает (

ktvofffka 20.02.2013 07:39

(1)
согласен не совсем при записи
Есть 2 момента нарастания памяти момент формирования таблицы и загрузка таблицы в наборзаписей перед записью. Проблема в том, что 1С не освобождает память при очистке тз и наборазаписей


Текущее время: 05:23. Часовой пояс GMT +3.