【发布时间】:2013-01-03 21:20:03
【问题描述】:
我的 PyGTK 应用程序创建了一个用于显示结果预览的辅助弹出窗口。这个窗口相当精致,表格小部件嵌套三层,并由 HBox 填充,每个 HBox 在最低级别包含一个标签。标签的总数可以是数千个。我注意到,当我关闭此窗口时,GTK 变得非常忙于处理某些事情(使用 gobject.idle_add 添加的函数在超过 10 秒内无法解析),并且我的应用程序的主窗口此时变得无响应。即使有这么多的小部件,我觉得关闭窗口需要这么长时间,甚至比设置和显示时间还要长,这让我感到很奇怪。有什么办法可以减轻这种情况吗? (我尝试在另一个线程中创建和显示窗口,但显然使用 GTK 这是不行的)
【问题讨论】:
-
使用分析器找出哪些函数需要这么长时间。
-
也许你可以先隐藏窗口,然后通过idle_add进行销毁。但无论如何,它一定不会那么长。这里出现了严重的问题。测量它!
-
在总共 61.654 秒的执行时间中(包括它等待我输入的一小段时间),47.945 秒用于 gtk._gtk.main,8.347 秒用于 gtk.Widget.show_all,和 gtk.Container.add 中的 2.587。设置和显示窗口大约需要 11 秒(在 show_all 和 add 中花费的时间),以及 44 秒(gtk._gtk.main 时间,减去等待输入所花费的时间)来销毁它。另外,我显然很不擅长估计时间。