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

时间:2010-03-24 13:20:17

标签: c# mono gtk gtk#

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

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

还有其他一些较小的因素可能会或可能不会影响Gtk在Windows上的表现,比如GTK与其他类似1-2的工具包相比,具有12-15个额外dll的额外运行时间。动态链接整个Gtk运行时可能会大大增加启动时间。还有一个事实是Gtk使用了很多其他库,例如GlibPango,当然还有Cairo。为这些库编写 glue code 也会增加很多开销,有时甚至会增加像<{3}}这样的额外库。

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

答案 1 :(得分:2)

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

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