【问题标题】:GTK+ (GTKSharp) poor performance in WindowsGTK+ (GTKSharp) 在 Windows 中性能不佳
【发布时间】:2010-03-24 13:20:16
【问题描述】:

在我打算跨平台的 Mono (C#) 项目中,我将 GTK 用于 UI。但是我注意到的一件事是,在我的 Archlinux 上网本上,性能非常快,因此鼠标悬停和小部件重绘等事件非常快。

与双核CPU上的windows(7)相比,性能真的很弱。这让我很困惑。

我是否做错了什么导致操作系统之间存在这种性能差异?

我可以采取哪些方法来优化 Windows 上的 GTK?悬停事件需要大约 0.5 秒才能启动,这真的很糟糕,而在 Linux 的弱(er)上网本上几乎是立即的。

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

谢谢!

【问题讨论】:

    标签: c# mono gtk gtk#


    【解决方案1】:

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

    不过,即使这样也不能完全解释 Gtk 在 Windows 上的糟糕性能。另一个问题可能是,Gtk 不使用本机小部件,而是更喜欢draw it's own widgets,这在所有平台上看起来几乎相同。然而,在 Windows 上,它还尝试使用 LibWimpemulate 原生小部件,以进一步增加原生外观。这个额外的仅限 Windows 的步骤也可能会导致性能开销。要亲自查看,请尝试删除(或重命名)GIMP 目录中的 libwimp.dll。之后 GIMP 运行得更快(虽然看起来有点非本地)。

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

    要优化 Gtk,您可以尝试更改 Cairo 的后端(困难、不推荐并且需要大量胶水代码)或停止使用 libWimp(这会使 Gtk 看起来不那么原生)。但总的来说,我认为 GTK 并没有那么慢。我个人从来不需要使用任何优化。尽管我过去也使用过 WinApi。

    【讨论】:

      【解决方案2】:

      我猜性能问题出在开罗。我建议您在 Linux 中使用 gtkparasite 来查看应用程序的某些部分在何时何地被重绘并进行优化。

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

      【讨论】:

        猜你喜欢
        • 2022-11-05
        • 1970-01-01
        • 2011-09-01
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        相关资源
        最近更新 更多