Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Утечка памяти при наследовании!!! (число прочтений - 19182 )
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Утечка памяти при наследовании!!!
27. Июня 2006 :: 10:15
Печать  
Товарищи, мине плохо. Я щас прям помирать начну...

Имеем такую иерархию:
Код
Выбрать все
класс База = классТесты@MD
{
};

класс Потомок = классТесты@MD : База
{
};
 


модули классов пустые
Код
Выбрать все
//# ClassBegin База;
//# ClassEnd База;

//# ClassBegin Потомок;
//# ClassEnd Потомок;
 


Тестовая обработка
Код
Выбрать все
Процедура ТестСозданияОбъекта()
	Для н = 1 По 50000 Цикл
		Объект = СоздатьОбъект("Потомок");
		Объект = "";
	КонецЦикла;
КонецПроцедуры
 



После запуска обработки Working Set выростает с 23к до 190к.  И не освобождается.  Если создавать объекты класса "База" то память никуда не девается.
То что классы лежат в одном модуле роли не играет, это я уже для эксперимента создал совсем пустые классы. С нормальными классами, где внутренние данные есть,  эффект намного мощнее.

Может я чего не так делаю, а?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Утечка памяти при наследовании!!!
Ответ #1 - 27. Июня 2006 :: 10:21
Печать  
ADirks писал(а) 27. Июня 2006 :: 10:15:
Товарищи, мине плохо. Я щас прям помирать начну...

Никак нельзя, держись Улыбка

1. Была тема на itland года 3 назад, от Палыча, называлась "Пожиратель Памяти".
Суть в том, что разрушение объекта происходит не сразу, а через какое-то время.

2. Я присмотрюсь вечером еще раз, распределение памяти несложно проанализировать.
Вдруг правда потери.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #2 - 27. Июня 2006 :: 10:27
Печать  
ADirks писал(а) 27. Июня 2006 :: 10:15:
После запуска обработки Working Set выростает с 23к до 190к.  И не освобождается.  Если создавать объекты класса "База" то память никуда не девается.

Как и чем проверяешь количество памяти?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #3 - 27. Июня 2006 :: 10:30
Печать  
У меня такое чувство, что объекты вообще не удаляются из памяти. По крайней мере всё что принадлежит базовому классу. А у меня в каждой визуальной форме создаётся как минимум 1 объект. Но обычно от 3 до 5. Так что проблема для меня весьма неприятная.

Память смотрю Process Explorer'ом от SysInternals.  Но такое пожирательство и невооруженным глазом видно, оно на всей системе отражается.

10 минут подождал - память не освобождается.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #4 - 27. Июня 2006 :: 10:33
Печать  
Просьба - поставь в деструктор Предупреждение и посмотри, в какой момент оно появляется.
Типа сначала запусти указанный тобой код (только сначала не ставь 50000 Улыбка ), далее поработай/подожди 10 минут, после попробуй выйти из 1С.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Утечка памяти при наследовании!!!
Ответ #5 - 27. Июня 2006 :: 10:37
Печать  
А при повторном запуске обработки working set /private bytes снова увеличивается?
Если нет - может это очередной side-effect от CString/CFixedAlloc?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #6 - 27. Июня 2006 :: 10:46
Печать  
Создание и удаление одного объекта типа "Потомок" выглядит так:
Код
Выбрать все
База - конструктор
Потомок - конструктор
Потомок - деструктор
 


При закрытии 1С деструктор базы не вызывается (да и с чего?)

в деструкторе базы прописано
Код
Выбрать все
Процедура Деструктор()
	Предупреждение("База - деструктор");
КонецПроцедуры
 


так что пропустить его я никак не мог

Цитата:
А при повторном запуске обработки working set /private bytes снова увеличивается?
Если нет - может это очередной side-effect от CString/CFixedAlloc?
Увеличивается, причём в таких же примерно объёмах.  Мож конечно и связано это с CString, но почему проявляется только на иерархиях? Простой класс хоть обсоздавайся - память никуда не девается.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Утечка памяти при наследовании!!!
Ответ #7 - 27. Июня 2006 :: 10:53
Печать  
Цитата:
Увеличивается, причём в таких же примерно объёмах.  Мож конечно и связано это с CString, но почему проявляется только на иерархиях? Простой класс хоть обсоздавайся - память никуда не девается.

Тогда не похоже на CString, похоже на утечку. Посмотрю вечером.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #8 - 27. Июня 2006 :: 11:59
Печать  
А на обычных классах (т.е. не тех, которые в одном файле) такая же последовательность вызова конструкторов и деструкторов?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #9 - 27. Июня 2006 :: 12:02
Печать  
ADirks писал(а) 27. Июня 2006 :: 10:46:
Создание и удаление одного объекта типа "Потомок" выглядит так:
Код
Выбрать все
База - конструктор
Потомок - конструктор
Потомок - деструктор
 


При закрытии 1С деструктор базы не вызывается (да и с чего?)

А где у тебя деструктор базы вызывается ?
ЗЫ Если не было вызова деструктора в течение сеанса, то его вызов происходит при завершении работы 1С
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Утечка памяти при наследовании!!!
Ответ #10 - 27. Июня 2006 :: 12:15
Печать  
Если такое происходит, то только на последних сборках.

Так как у нас прогоняются тесты, в которых сотнями формируются объекты с глубокой иерархией. И каждый не хило память отжирает. Мы бы сразу заметили.

На сборке от 13.06.06 такого не обнаруживается.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #11 - 27. Июня 2006 :: 12:17
Печать  
Ага, мы уже с Алексеем это выяснили Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #12 - 27. Июня 2006 :: 12:18
Печать  
Как выяснилось, такая фигня появилась в ночной сборке от 27.06.  В сборке от 26.06 всё нормально.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #13 - 27. Июня 2006 :: 12:19
Печать  
ADirks писал(а) 27. Июня 2006 :: 10:15:
Может я чего не так делаю, а?


Смех Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Утечка памяти при наследовании!!!
Ответ #14 - 27. Июня 2006 :: 12:21
Печать  
Теперь осталось
1) найти крайнего/виноватого Печаль
2) добавить необходимые тесты в конфу тестирования 1С++ Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать