GTK + (GTKSharp) низкая производительность в Windows - PullRequest
3 голосов
/ 24 марта 2010

В моем проекте Mono (C #), который должен быть кроссплатформенным, я использую GTK для пользовательского интерфейса. Однако я заметил одну вещь: на моем нетбуке в Archlinux производительность действительно высокая, поэтому такие события, как наведение мыши, перерисовка виджетов и т. Д., Действительно быстрые.

По сравнению с windows (7) на двухъядерных процессорах производительность действительно очень низкая. Что меня смущает.

Я что-то не так делаю, чтобы гарантировать разницу в производительности между операционными системами?

Как я могу оптимизировать GTK в Windows? Плохое время для всплывающего события - около 0,5 секунды, в то время как на слабом (нет) нетбуке с Linux это почти мгновенно.

Мой код здесь для слоя с графическим интерфейсом: http://code.google.com/p/subsynct/source/browse/branches/dev/subsync#subsync/GUI

Спасибо!

Ответы [ 2 ]

5 голосов
/ 30 сентября 2011

Настоящая проблема связана с использованием графической библиотеки GTK. Каир. Вы правы, говоря, что GTK работает намного лучше в Linux и других операционных системах по сравнению с Windows. Это говорит о том, что на самом деле проблема не во всей Каирской библиотеке. Он находится в Win32 бэкэнде Каира. Согласно Backend-Info в Каире, Документы; Cairo использует xlib , а в некоторых случаях cairo-gl (например, настроенный OpenGL) для работы на Linux и других платформах. В то время как в Windows он использует Win32 GDI , который, в конце концов, немного медленный и устаревший (не говоря уже о программном обеспечении полностью).

Тем не менее, даже это не в полной мере объясняет низкую производительность Gtk в Windows. Другая проблема может заключаться в том, что вместо использования нативных виджетов, Gtk предпочитает рисовать свои собственные виджеты , которые выглядят почти одинаково на всех платформах. Однако в Windows он также пытается эмулировать нативные виджеты, используя LibWimp для дальнейшего улучшения нативного внешнего вида. Этот дополнительный шаг только для Windows может также учитывать снижение производительности. Чтобы убедиться в этом, попробуйте удалить (или переименовать) libwimp.dll в каталоге GIMP. После этого GIMP работает намного быстрее (хотя выглядит немного неродным).

Есть и другие более мелкие факторы, которые могут влиять или не влиять на производительность Gtk в Windows, например, тот факт, что GTK имеет дополнительное время выполнения с примерно 12-15 дополнительными dll по сравнению с другими наборами инструментов, которые имеют как 1-2. Динамическое связывание всей среды выполнения Gtk может значительно увеличить время запуска. Существует также тот факт, что Gtk использует множество других библиотек, таких как Glib , Pango и, конечно, Cairo . Написание клейкого кода для этих библиотек также добавляет много накладных расходов, а иногда даже библиотеку extra , такую ​​как Gdk .

Чтобы оптимизировать Gtk, вы можете попробовать изменить бэкэнд Cairo (сложно, не рекомендуется и требует еще тонны клея) или прекратить использование libWimp (это сделает Gtk менее естественным). Но в целом я думаю, что GTK не , что медленно. Мне никогда не приходилось использовать какие-либо оптимизации. Хотя я и раньше использовал WinApi.

2 голосов
/ 25 марта 2010

Я думаю, что проблемы с производительностью в Каире. Я предлагаю вам использовать gtkparasite в Linux, чтобы увидеть, где и когда перерисовываются части вашего приложения, и оптимизировать это.

Вы также можете использовать бесплатный CLR Profiler от MS для Windows, чтобы найти точки доступа в вашем приложении.

...