在我的跨平台的Mono (C#)项目中,我在UI中使用了GTK。然而,我注意到一件事,在我的Archlinux上网本上,性能真的很快,所以鼠标悬停和窗口小部件重绘等事件真的很快。
与双核CPU上的windows (7)相比,它的性能真的很弱。这让我很困惑。
我是不是做错了什么,导致了OSes之间的性能差异?
有哪些方法可以优化Windows上的GTK?悬停事件需要0.5秒左右才能启动,这真的很糟糕,而在使用Linux的弱(Er)上网本上,这几乎是立马发生的。
下面是GUI层的代码:http://code.google.com/p/subsynct/source/browse/branches/dev/subsync#subsync/GUI
谢谢!
发布于 2011-09-30 13:34:15
真正的问题是GTK使用的图形库。开罗。您说得对,与Windows相比,GTK在Linux和其他操作系统上的性能要好得多。这表明实际上问题并不是整个开罗图书馆的问题。它位于开罗的Win32后端。根据Cairo Docs中的Backend-Info,Cairo在Linux和其他平台上使用xlib,在某些情况下还使用cairo-gl (想想定制的OpenGL)。而在Windows上,它使用的是Win32 GDI,毕竟它有点慢和过时(更不用说完全的软件渲染了)。
尽管如此,这并不能完全解释Gtk在Windows上的糟糕性能。另一个问题可能是,Gtk更喜欢在所有平台上看起来几乎相同的draw it's own widgets,而不是使用原生小部件。然而,在Windows上,它还试图使用LibWimp对原生小部件进行,以进一步增强原生外观。这一额外的仅用于Windows的步骤也可能会导致性能开销。要亲自查看,请尝试删除(或重命名) GIMP目录中的libwimp.dll。在那之后,GIMP运行得更快了(尽管看起来有点非原生的)。
还有其他较小的因素可能会也可能不会影响GTK在Windows上的性能,比如GTK有额外的运行时,与其他工具包相比,有12-15个额外的dll。动态链接整个Gtk运行时可能会大大增加启动时间。还有一个事实是,Gtk使用了很多其他库,比如Glib、Pango,当然还有Cairo。为这些库编写 也会增加很多开销,有时甚至会增加额外的库,比如Gdk。
要优化Gtk,您可以尝试更改Cairo的后端(困难、不推荐,并且需要大量的胶水代码)或停止使用libWimp (这会使Gtk看起来不那么本地化)。但总体而言,我认为GTK并不是那么慢。我个人从来不需要使用任何优化。尽管我以前也用过WinApi。
发布于 2010-03-25 07:59:54
我猜性能问题出在开罗。我建议你在Linux中使用gtkparasite来查看应用程序的各个部分何时何地被重绘,并对此进行优化。
你也可以使用微软在Windows上的免费CLR Profiler来查找你的应用程序中的热点。
https://stackoverflow.com/questions/2507918
复制相似问题