GTK +(GTKSharp)在Windows中表现不佳

在我的Mono(C#)项目中,我将使用GTK作为UI。 然而,我注意到的一件事是,在我的Archlinux上网本中,性能非常快,因此鼠标hover和重绘小部件等事件真的很快。

与双核CPU上的windows(7)相比,性能确实很弱。 这困扰我。

我是否做错了保证操作系统之间的性能差异?

有什么方法可以在Windows上优化GTK? 对于hover事件来说,花费大约0.5秒的时间来开启它是非常糟糕的,而它几乎立即用于Linux上的弱(上)上网本。

我的代码在这里用于GUI层: http : //code.google.com/p/subsynct/source/browse/branches/dev/subsync#subsync/GUI

谢谢!

真正的问题是图形库GTK使用。 开罗。 你说得对,与Windows相比,GTK在Linux和其他操作系统上的表现要好得多。 这表明事实上问题实际上并不是整个开罗图书馆。 它位于开罗的Win32后端 。 根据Cairo Docs中的Backend-Info ; Cairo使用xlib ,在某些情况下使用cairo-gl (认为​​自定义的OpenGL)可以在Linux和其他平台上使用。 虽然在Windows上它使用Win32 GDI ,毕竟有点慢和过时(更不用说完全软件渲染)。

尽管如此,即使这并不能完全解释Gtk在Windows上的糟糕表现。 另一个问题可能是,不是使用原生Widgets,Gtk更喜欢绘制自己的小部件 ,这些小部件在所有平台上看起来几乎相同。 但是在Windows上,它还尝试使用LibWimp 模拟本机窗口小部件,以进一步增加原生外观。 这个额外的仅Windows步骤也可能会导致性能开销。 要自己查看此内容,请尝试在GIMP目录中删除(或重命名)libwimp.dll。 之后GIMP的运行速度要快得多(虽然看起来有点非原生)。

还有一些其他较小的因素可能会或可能不会影响Gtk在Windows上的性能,例如GTK与其他具有类似1-2的工具包相比,具有12-15个额外dll的额外运行时间。 动态链接整个Gtk运行时可能会大大增加启动时间。 还有一个事实是Gtk使用了许多其他库,如Glib , Pango ,当然还有开罗 。 为这些库编写粘合代码也会增加很多开销,有时甚至会增加像Gdk这样的额外库。

为了优化Gtk,您可以尝试更改开罗的后端(困难,未经过重新调整并需要大量的胶水代码)或停止使用libWimp(这将使Gtk看起来不那么原生)。 但总体而言,我认为GTK并不那么慢。 我个人从未需要使用任何优化。 即使我过去也使用过WinApi。

我猜想性能问题出现在开罗。 我建议您在Linux中使用gtkparasite来查看重新绘制应用程序部分的位置和时间并进行优化。

您还可以使用Windows上MS的免费CLR Profiler查找应用中的热点。