GTK/GDK简易应用窗口及按钮更新/刷新过慢问题排查
批量更新GTK按钮卡顿问题求助
我不是GTK/GDK专家,目前在维护他人遗留的GTK C应用。该应用是一个带有按钮网格的窗口,通过TCP连接更新按钮的标签、图像等内容,但窗口及按钮的刷新速度极慢。
经测试,gtk_button_set_image单次调用耗时约1ms,50个按钮批量更新时这一操作形成了性能瓶颈。各相关调用的大致耗时如下:
Call Time (ms) approximate gtk_button_set_image 1ms gtk_button_set_label 0.5 gdk_pixbuf_scale 0.5 recolour_pixbuf (重写后) 0.5 gdk_pixbuf_new_subpixbuf 0.4 gtk_css_provider_load_from_data 0.3 gtk_image_new_from_pixbuf 0.15 BuildButtonCSS 0.01
其中recolour_pixbuf()需要逐像素处理,暂无可替代方案。即便已经优化为仅更新有变更的内容,批量更新时仍卡顿明显,该问题在树莓派CM4及桌面Linux环境中均存在。我怀疑每次按钮更新后都会触发屏幕刷新阻塞,想请教是否可以先抑制窗口重绘,待所有按钮更新完成后再统一刷新。
补充说明:应用通过g_timeout_add(100, (GSourceFunc)check_refresh, _context->refresh)每100ms检查并更新按钮,单按钮CSS更新耗时约1.5ms,图像更新约3.5ms,部分场景下单按钮总耗时超过10ms。
内容的提问来源于stack exchange,提问作者John U
相关产品推荐
相关产品推荐

