首页 > 解决方案 > 当我们有大量小部件时如何提高 perl Gtk2 性能

问题描述

我正在使用 Gtk2 编写一个 perl GUI,它有一个滚动窗口,其中包含许多 GTk2::Expander,其中包括不同的小部件。问题是当我有大量扩展器(~80,000)时,执行 show_all() 所需的时间很长,而当我打开单个扩展器时需要几秒钟。使用较少的扩展器运行相同的脚本会产生非常快速的响应。

由于我的扩展器存在于滚动窗口中,并且只有一部分是真正可见的,有没有办法提高性能?喜欢只显示可见的扩展器并将所有其他扩展器隐藏起来?

我不能使用 GTK3,我只需要使用 Perl 和 Gtk2。

示例代码:

my $ItemsCount = 10000;
my $ScWin      = Gtk2::ScrolledWindow->new(undef, undef);
my $Frame      = Gtk2::Frame->new('Items');
my $ItemsBox   = Gtk2::Table->new(2, $ItemsCount+1, FALSE);

my  $View = Gtk2::Viewport->new();

$ScWin->set_policy('automatic', 'automatic');   
$View->add($ItemsBox);
$ScWin->add($View);

for my $i (0 .. $ItemsCount-1)  {
    my $exp =  Gtk2::Expander->new();
    $exp     ->set_label("Item #$i");
    $ItemsBox->attach($exp, 0, 1, $i, $i+1, 'fill', 'fill', 1, 2);
}
$MainBox    ->pack_start    ($ScWin     , TRUE, TRUE, 0);

标签: perlgtk2

解决方案


推荐阅读