c# - GTK+ (GTKSharp) 在 Windows 中性能不佳

标签 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

谢谢!

最佳答案

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

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

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

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

关于c# - GTK+ (GTKSharp) 在 Windows 中性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507918/

相关文章:

python - 有没有一种官方方法可以在 GTK 中创建离散值范围小部件?

gtk - 如何在开罗表面上绘制任何 GTK 小部件

c# - ASP.NET 中的全局变量

java - MonoTouch 性能与 Objective-C/Java

c# - mono 项目中使用的所有依赖项是否都需要用 mono 编译

python - gtk.ListStore/gtk.TreeModel 和 dict 类型

c# - dapper 会用谓词做什么?

c# - 重叠的矩形

c# - AllowDrop 在 Silverlight 中不再适用于桌面文件

c# - UISearchBar SearchButtonClicked 从未调用过?