C#, WinForms - ce que quelqu'un sait en C# d'un RIB de la bibliothèque ne tarde pas GDI+
GDI+ est très lent, presque entièrement le logiciel alors que le RIB est fortement accéléré par le matériel.
GDI+ est ce que la classe Graphics utilise avec les WinForms et il est juste trop lent.
Quelqu'un a fait une .NET GDI bibliothèque afin d'avoir la vitesse?
[MODIFIER]
Beaucoup de gens recommandent OpenGL/DirectX. Une exigence de la mine est de compatibilité du client en particulier le bureau à distance. Autant que je sache, de bureau à distance ne prend pas en charge OGL/DirectX hors de la boîte.[/EDIT]
GDI+ utilise GDI. Si vous avez besoin d'utiliser GDI directement, utilisez c ou c++.
Qu'est-ce que vous essayez de faire que GDI+ vous ralentit tellement? J'ai toujours trouvé ça beaucoup rapide, sauf pour le dessin des bitmaps et dans ce cas, vous pouvez déposer à PInvoke BitBlt.
Pouvez-vous être plus précis sur exactement ce que les parties de GDI sont vous ralentir?
Sasik: Yep, ou, si vous avez besoin d'un accès direct à l'image en mémoire, il suffit d'appeler LockBits et obtenir un pointeur.
Plus précisément, je dessin des grilles et, éventuellement, des graphiques (pour les systèmes financiers) Le client typique a 4 moniteurs et beaucoup de mes fenêtres sont en plein écran sur 2 - 4 de leurs écrans
Qu'est-ce que vous essayez de faire que GDI+ vous ralentit tellement? J'ai toujours trouvé ça beaucoup rapide, sauf pour le dessin des bitmaps et dans ce cas, vous pouvez déposer à PInvoke BitBlt.
Pouvez-vous être plus précis sur exactement ce que les parties de GDI sont vous ralentir?
Sasik: Yep, ou, si vous avez besoin d'un accès direct à l'image en mémoire, il suffit d'appeler LockBits et obtenir un pointeur.
Plus précisément, je dessin des grilles et, éventuellement, des graphiques (pour les systèmes financiers) Le client typique a 4 moniteurs et beaucoup de mes fenêtres sont en plein écran sur 2 - 4 de leurs écrans
OriginalL'auteur Joe | 2011-06-17
Vous devez vous connecter pour publier un commentaire.
De rendu de texte dans GDI+ est plus lent que le GDI. Microsoft a réalisé cette après .NET 1.1.
C'est pourquoi .NET 2.0 contient une nouvelle
TextRenderer
classe qui encapsule GDI DrawText. Il dispose de deux méthodes statiques:TextRenderer.Savoir measuretext
TextRenderer.DrawText
..NET 2.0, tous les WinForm, les contrôles ont été converties pour utiliser
TextRenderer
, au lieu de:(à condition que vous tournez hors
UseCompatibleTextRendering
)Le dessin d'un
Bitmap
est aussi lente dans GDI+, c'est pourquoi vous utilisezCachedBitmap
. Il tire très rapide.Voir aussi
Certaines personnes ici: stackoverflow.com/questions/71374/... Dire TextRenderer est plus lent sous Vista+. Quelle est votre expérience de le dire? Je ne se soucient Vista/7/+
Microsoft gars, Chris Jackson, a écrit un excellent article où il a comparé les deux: blogs.msdn.com/b/cjacks/archive/2006/05/19/...
Je n'ai pas pu trouver DrawCachedBitmap en C# dans la bibliothèque. Donc si quelqu'un est intéressé, j'ai fait un petit wrapper C++ managé à utiliser CachedBitmap à partir de C# (github.com/svejdo1/CachedBitmap)
OriginalL'auteur Ian Boyd
Avez-vous vérifié SlimDX? Il a géré wrapper autour de Direct2D, qui est entièrement accélération matérielle 2d API et mélange aussi bien avec les traditionnels GDI.
Edit:
J'ai aussi trouvé cette bibliothèque vous pourriez trouver intéressant: SharpDX
"SharpDX est destiné à être utilisé comme une alternative géré DirectX cadre. L'API est généré automatiquement à partir du SDK de DirectX en-têtes, avec AnyCpu cible, ce qui signifie que vous pouvez exécuter votre application sur les ordinateurs x86 et x64 plateforme, sans avoir à recompiler votre projet ou l'installation d'assembly dans le GAC. SharpDX est aussi le plus rapide de gestion de DirectX mise en œuvre."
Ce dispose également d'un support pour Direct2D.
Wow SharpDX à l'air vraiment sympa. Il n'a pas l'air comme il fonctionne sur RDP 🙁
OriginalL'auteur Brandon Moretz
Microsoft Code de l'API Pack (Archivé Févr. 2010) présente des exemples de l'appel d'Api DirectX à partir de langages managés.
Vous pouvez obtenir WindowsAPICodePack-DirectX sur Nuget.
Le Code Microsoft pack a un exemple d'utilisation de Direct2D.
OriginalL'auteur Dour High Arch
Vous pouvez essayer et de passer à WPF.
Je l'ai fait parce que WinForms dessiner lentement.
La transition est très dur, en particulier "à l'ancienne" code-ers comme moi.
Mais WinForms ne peut pas être battu à la vitesse de démarrage et la RAM.
WPF commence lentement et prend beaucoup de RAM.
Aussi, je suis d'accord, la transition n'est PAS facile et c'est douloureux. Encore je me trouve à l'aide de WPF comme WinForms, c'est-à - ne pas utiliser de fantaisie de liaison et d'utiliser beaucoup de code derrière au lieu de faire une grande partie du travail qui peut être automagitically fait - pas si sûr que les effets sur la performance bien.
Il y a eu beaucoup de cris au sujet de la performance de WPF (UN quad-core nVidia desktop ne peut pas animer aussi bien que d'un intégré à l'iPhone?) fixwpf.org
OriginalL'auteur Vercas
Si votre application est multi-plateforme, je vous conseille d'utiliser OpenTK, qui est un wrapper géré pour l'OpenGL, et est souvent plus facile à apprendre que DirectX (soit géré ou natif). OpenTK/OpenGL ont tendance à offrir de meilleures performances que DirectX. Avec OpenTK, vous pouvez dessiner votre image sur le GPU, puis le pixelliser en une image bitmap qui peut l'interopérabilité avec la classe Bitmap dans le Système.De dessin.
OriginalL'auteur IDWMaster