GtkTreeView treestore内存分配

我有一个自定义gtk.treeview用于管理自己的liststore包装类。 这个类有它自己的方法清除liststore的数据,并用新的数据覆盖。 为了测试内存消耗的目的,只是树视图中显示8列50,000行的整数。

我注意到,我的每一个函数调用,更新与数据liststore似乎增加了应用程序使用的内存,而且它永远不会退缩的数据被清除后。

这是我简单的TreeView的实现:

class TreeViewPrototype(gtk.TreeView): def __init__(self): gtk.TreeView.__init__(self) self.columns = [str, str, str, str, str, str, str, str] # Initialize Treeview and TreeViewColumns here # Setup columns self.liststore = gtk.ListStore(*self.columns) self.set_model(self.liststore) def set_list_model(self): self.liststore.clear() self.liststore = gtk.ListStore(*self.columns) # Populate liststore with dummy data for i in range(50000): row = [] for j in range(len(self.columns)): row.append("%d[%d]"%(i,j)) self.liststore.append(row)

在我看来,每一个呼叫set_list_model,当我覆盖liststore用新的,它永远不会释放这些数据的存储。 我究竟做错了什么?

--------------解决方案-------------

这个问题似乎是在TreeView的参考liststore。 由于树形视图是一个容器,是整个应用程序的整个生命周期目前,老liststore徘徊,而仍然由TreeView的构造函数引用。 如果一个新的liststore创建每次和没有提及是由树状举行,这问题似乎消失。

我的解决方案:

class TreeViewPrototype( gtk.TreeView ):
def __init__(self):
gtk.TreeView.__init__(self)
self.columns = [str,str,str,str,str,str,str,str]
#TreeView Initialization

def set_list_model( self ):
self.set_model(None)
liststore = gtk.ListStore( *self.columns)
for i in range( 50000 ):
row = []
for j in range( len( self.columns)):
row.append( "%d[%d]"%(i,j))
liststore.append( row )
self.set_model( liststore )

使用set_model(None)似乎正常取消引用模型中的当前liststore,因此它不会在存储器流连。

分类:蟒蛇 时间:2015-03-16 人气:9
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.492 (s). 10 q(s)