perl - 当我们有大量小部件时如何提高 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);
解决方案
推荐阅读
- javascript - AnalyserNode.getFloatFrequencyData() 返回负值
- python - 从 Python 调用的 VBA 调用的 Python 脚本不起作用
- list - haskell中一些数字([1,1,1,1,1,1])的列表
- swift - SwiftUI Representable TextField 更改字体消失
- javascript - 我们可以在 .NetCore WebApi 中沿 c# 放置 JavaScript 代码吗
- javascript - 为什么我无法访问对象的属性?
- mysql - 服务器错误(RequestEntityTooLarge):请求实体太大:创建 configMap 时限制为 3145728
- yii2 - TCPDF 在一行之后跳过项目并仅打印一些数据行
- angular - 在两个同级组件之间交换引用
- sql - 删除操作间歇性减慢oracle 11g