gpt4 book ai didi

python - GtkTreeView treestore内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:28 25 4
gpt4 key购买 nike

我有一个自定义的 gtk.treeview 包装器类,它管理自己的列表存储。该类有自己的方法来清除列表存储的数据并用新数据覆盖它。出于测试内存消耗的目的, TreeView 仅在 8 列中显示 50,000 行整数。

我注意到每次调用用数据更新列表存储的函数似乎都会增加应用程序使用的内存,并且在清除数据后它永远不会下降。

这是我的简单 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 时,当我用一个新的覆盖列表存储时,它永远不会取消分配数据的内存。我做错了什么?

最佳答案

问题似乎出在对列表存储的引用上 TreeView 。因为 TreeView 是存在的容器在应用程序的整个生命周期中,旧的列表存储徘徊,仍然被 TreeView 的构造函数引用。如果每次都会创建一个新的列表存储,并且没有引用被保存treeview,这个问题似乎消失了。

我的解决方案:

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) 似乎正确地取消引用了当前模型中的列表存储,因此它不会在内存中徘徊。

关于python - GtkTreeView treestore内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9317576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com