|
|
v8: Документ отжирает память и не освобождает ее |
☑ |
|
0
gar_den
21.03.12
✎
10:21
|
В документе есть реквизит типа ХранилищеЗначений.
При открытии документа это хранилище получается:
Настройки = ХранЗнач.Получить();
на этом месте отжирается большое количество памяти. После закрытия докмуента память не освобождается.
Настройки = ""; - не помогает.
В итоге при работе с ситемой она вылетает с сообщением Недостаточно памяти.
Подскажите как это можно побороть
|
|
|
1
Jstunner
21.03.12
✎
10:23
|
А если вообще убрать настройки?
|
|
|
2
gar_den
21.03.12
✎
10:26
|
а как данные тогда из хранилища доставать?
|
|
|
3
catena
21.03.12
✎
10:52
|
Настройки - это что? Переменная модуля, переменная формы? Объявляется в форме, вызывается в модуле?
|
|
|
4
asady
21.03.12
✎
10:55
|
(0) реквизиты доков и справочников типа ХранилищеЗначений зло. - для этого надо юзать РС.
мой совет: вынести этот реквизит в РС а сам реквизит удалить.
|
|
|
5
gar_den
21.03.12
✎
11:06
|
(3) переменная внутри процедуры
|
|
|
6
H A D G E H O G s
21.03.12
✎
11:14
|
Код работы полностью покажи
|
|
|
7
gar_den
21.03.12
✎
11:16
|
(4) упс. ошибся. это как раз не переменная, а РС
|
|
|
8
gar_den
21.03.12
✎
11:19
|
// Получаем настройки
Запрос.Текст="ВЫБРАТЬ
| ХранилищаПараметрическойНастройки.ДанныеПараметрическойНастройки
|ИЗ
| РегистрСведений.ХранилищаПараметрическойНастройки КАК ХранилищаПараметрическойНастройки
|ГДЕ
| ХранилищаПараметрическойНастройки.ПравилоОбработки = &ПравилоОбработки";
Результат=Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
СохраненныеДанные = Результат.ДанныеПараметрическойНастройки.Получить();
КонецЕсли;
мПоказателиДляОбработки=СохраненныеДанные.мПоказателиДляОбработки.Скопировать();
мДеревоПересчета=СохраненныеДанные.мДеревоПересчета.Скопировать();
СохраненныеДанные = "";
|
|
|
9
gar_den
21.03.12
✎
11:20
|
причем если СохраненныеДанные = ""; выполнить сразу после СохраненныеДанные = Результат.ДанныеПараметрическойНастройки.Получить(); то память освобождается
|
|
|
10
H A D G E H O G s
21.03.12
✎
11:21
|
мПоказателиДляОбработки=СохраненныеДанные.мПоказателиДляОбработки.Скопировать();
мДеревоПересчета=СохраненныеДанные.мДеревоПересчета.Скопировать();
А это чего?
|
|
|
11
H A D G E H O G s
21.03.12
✎
11:22
|
Это же остается.
Скажи:
СтрДлина(ЗначениеВСтрокуВнутр(мПоказателиДляОбработки));
СтрДлина(ЗначениеВСтрокуВнутр(мДеревоПересчета));
|
|
|
12
gar_den
21.03.12
✎
11:34
|
(10) это переменные модуля документа. он с ними потом работает
|
|
|
13
gar_den
21.03.12
✎
11:36
|
(11) СтрДлина(ЗначениеВСтрокуВнутр(мПоказателиДляОбработки)); - 1 473 809
|
|
|
14
PVV65
21.03.12
✎
12:57
|
(8) В обработчике события формы ПриЗакрытии напиши
мПоказателиДляОбработки = НЕОПРЕДЕЛЕНО;
мДеревоПересчета = НЕОПРЕДЕЛЕНО;
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший