2010-03-24 10 views
3

Dans mon projet Mono (C#) destiné à être multi-plateforme, j'utilise le GTK pour l'interface utilisateur. Cependant, une chose que j'ai remarquée est, sur mon netbook dans Archlinux, la performance est vraiment rapide, donc les événements tels que le survol de la souris, et le redessin des widgets, etc, sont vraiment rapides.GTK + (GTKSharp) performances médiocres sous Windows

Comparé à Windows (7) sur les processeurs dual core, les performances sont vraiment très faibles. Ce qui me rend perplexe. Est-ce que je fais quelque chose de mal qui justifie cette différence de performance entre les systèmes d'exploitation?

De quoi puis-je faire pour optimiser GTK sous Windows? C'est vraiment mauvais de prendre environ 0.5 secondes pour un événement de survoler à kick alors que c'est presque immédiat sur un netbook faible (er) avec Linux.

Mon code est ici pour la couche graphique: http://code.google.com/p/subsynct/source/browse/branches/dev/subsync#subsync/GUI

Merci!

Répondre

2

Je suppose que les problèmes de performance sont au Caire. Je vous suggère d'utiliser gtkparasite sous Linux pour voir où et quand des parties de votre application sont en train d'être redessinées et d'optimiser cela.

Vous pouvez également utiliser le profileur gratuit CLR de MS sur Windows pour trouver les points d'accès dans votre application.

5

Le vrai problème est avec la bibliothèque graphique utilisée par GTK. Caire. Vous avez raison de dire que GTK fonctionne beaucoup mieux sur Linux et sur d'autres systèmes d'exploitation que Windows. Cela suggère qu'en fait le problème ne concerne pas toute la bibliothèque du Caire. Il est dans le Win32 backend du Caire. Selon le document Backend-Info dans Cairo Docs; Cairo utilise xlib et dans certains cas cairo-gl (pensez à OpenGL personnalisé) pour travailler sur Linux et d'autres plates-formes. Sous Windows il utilise Win32 GDI ce qui, après tout, est un peu lent et périmé (pour ne pas dire complètement rendu logiciel).

Cependant, même cela ne tient pas complètement compte des mauvaises performances de Gtk sous Windows. Un autre problème peut être que, au lieu d'utiliser des Widgets natifs, Gtk préfère draw it's own widgets qui semble presque identique sur toutes les plates-formes. Toutefois, sous Windows, il essaie également de emulate les widgets natifs en utilisant LibWimp pour augmenter encore l'aspect et la convivialité natifs. Cette étape supplémentaire Windows uniquement peut également prendre en compte les frais généraux liés aux performances. Pour voir cela par vous-même, essayez de supprimer (ou de renommer) libwimp.dll dans le répertoire GIMP. GIMP fonctionne beaucoup plus vite après cela (bien que l'air un peu non-natif).

Il existe également d'autres facteurs plus petits qui peuvent ou non affecter les performances de Gtk sur Windows, comme le fait que GTK a un runtime supplémentaire avec 12-15 dll supplémentaires par rapport aux autres toolkits qui ont comme 1-2. Lier dynamiquement tout le Gtk Runtime peut augmenter considérablement le temps de démarrage. Il y a aussi le fait que Gtk utilise beaucoup d'autres bibliothèques comme Glib, Pango, et bien sûr, Cairo. L'écriture glue code pour ces bibliothèques ajoute également beaucoup de frais généraux, et parfois même une bibliothèque supplémentaire comme Gdk. Pour optimiser Gtk, vous pouvez essayer de changer le backend de Cairo (difficile, non corrigé et nécessite une tonne de code de colle) ou arrêter d'utiliser libWimp (cela rendra Gtk moins natif). Mais globalement je pense que GTK n'est pas que lent. Je n'ai jamais personnellement besoin d'utiliser des optimisations. Même si j'ai utilisé WinApi dans le passé aussi.

Questions connexes