Доброе Всем время суток!
Сразу скажу, что использую PySide.
Есть Layout, на котором постоянно удаляется один виджет и создаётся заново с новыми параметрами. Всего на слое 2 виджета
Удаляю разными способами
self.widget2.close()
self.layout.removeItem(self.layout.itemAt(1))
try:
self.widget2.destroy()
self.widget2.deleteLater()
self.widget2 = None
del (self.widget2)
except:
print 'Delete Error!'
Добавляю новый виджет
self.widget2 = MyWidget(self, name)
self.layout.addWidget(self.widget2)
В классе MyWidget строится большой виджет (много разных элементов в слое)
В ходе примерно 50 выполнений занятая память плавно возрастает с
%MEM 1.8
до
%MEM 2.2
А памяти 4 Гига. Причём дальшейшее выполнение этого кода к такой утечке уже не приводит. Но если то же делать с другим виджетом (тоже класс MyWidget, но от входящих параметров он строит другой виджет) то память в течении первых десятков повторения кода растёт от %MEM 2.2 и плавно доходит до %MEM 2.6 (или 2.7, не столь важно) и опять дальше практически не растёт.
В классе MyWidget следующий код (удаление всех виджетов в слое у widget2) результата так же не даёт
for i in range (self.grid.count()):
w = self.grid.itemAt(i)
if hasattr (w, 'widget'):
if hasattr (w.widget(), 'close'):
w.widget().close()
widg = w.widget()
del widg
del w
Подскажите, что можно сделать и почему так?
Спасибо.