Ultra-schnelle Zeichnung in DotNET
Erste tests zeigen, dass GDI+ (das schreiben in VB.NET) ist nicht schnell genug für meine Zwecke. Meine Anwendung muss in der Lage sein zu ziehen Zehntausende von Teilchen (farbige Kreise, ganz vorzugsweise anti-Aliasing) in einer Vollbild-Auflösung bei 20+ Bildern pro Sekunde.
Ich bin zögerlich, um Schritt Weg von GDI+, da ich auch erfordern viele andere fortgeschrittene Zeichnungs-Funktionen (dash, Muster, Bilder, text, Pfade, Füllungen) von GDI+.
Suche nach gute Beratung über die Verwendung von OpenGL, DirectX oder andere Plattformen zu beschleunigen Partikel-rendering innerhalb von VB.NET. Meine app ist strikt 2D.
Goodwill,
David
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Sie verwenden möchten VB.NET dann kann man mit XNA oder SlimDX.
Ich habe einige Erfahrung im erstellen von Spiele mit GDI+ und XNA, und ich kann verstehen, dass GDI+ gibt dir Mühe.
Wenn ich wo, ich würde check out XNA, es ist viel schneller als GDI+, weil es tatsächlich Ihre Grafikkarte verwendet für das zeichnen und es hat sehr viel gute Dokumentation und Beispiele online.
SlimDX auch gut aussieht, aber ich habe keine Erfahrung mit ihm. SlimDX ist im Grunde die DirectX API für .NET.
Der einzige Weg, um die Geschwindigkeit, die Sie brauchen, ist die Abkehr vom software-rendering-hardware-rendering... und leider, dass bedeutet Bewegung zu OpenGL oder DirectX.
Die alternative ist, zu versuchen und optimieren Sie Ihre Grafik-Routinen nur ziehen die Teilchen, die gezeichnet werden müssen, nicht den ganzen Bildschirm/Fenster.
Ich würde Zustimmen, mit JaredPar, dass du bist besser dran profiling erste, um zu bestimmen, wenn Ihre vorhandene Codebasis verbessert werden kann, bevor eine riesige wechseln Sie zu einem neuen Rahmen. DirectX ist nicht der leichteste Rahmen, wenn Sie nicht vertraut sind mit ihm.
Ist es möglich, das problem im Algorithmus und nicht GDI+. Profiling ist der einzige Weg, um sicher wissen. Ohne Profil, es ist sehr möglich, wechseln Sie zu einem neuen GUI-framework und trifft exakt die gleichen Probleme.
Wenn Sie haben Profil, was Teil von GDI+ wurde ein problem verursacht?
Die signifikante Erhöhung der Geschwindigkeit fand ich beim schreiben eines game maker mit GDI+, war meine konvertieren von bitmaps in Format32bppPArgb;-
SuperFastBitmap = ConvertImagePixelFormat(SlowBitmap, Imaging.PixelFormat.Format32bppPArgb)
Wenn Sie nicht in dieses format schon, Sie sehen den Unterschied sofort, wenn Sie konvertieren.
Als Jared sagte,
könnte es sein, dass ein signifikanter Anteil Ihrer Zyklen sind nicht in GDI, und Sie könnten in der Lage zu reduzieren die.
Einen einfachen Weg, diese zu finden, ist halt zufällig ein paar mal, und untersuchen Sie den stack. Die chance, dass Sie fangen in der Tat Zeitverschwendung ist gleich dem Bruchteil der Zeit, die vergeudet wird.
Einer Anweisung oder Befehl call, der wird auf mehr als eine solche Probe ist etwas, dass, wenn Sie Sie ersetzen könnten, würden Sie sehen, eine Beschleunigung.
Im Allgemeinen ist die Methode dieser.
So, in der du arbeitest VB.net haben Sie versucht, mit Hilfe von WPF (Teil .net seit 3.0)? Als WPF basiert auf DirectX statt GDI+, das sollte Ihnen die Geschwindigkeit, die Sie brauchen, obwohl die Entwicklung des WPF ist nicht straight-forward an alle.
Weil die GDI+ ist nicht verschoben, von der Grafikkarte, das es langsam zu Rendern, weil es verwendet die CPU zu Rendern. Zumindest die, die Sie verwenden können, DirectX oder SlimDX.
(sorry für schlechtes Englisch)
Sehen: http://msdn.microsoft.com/en-us/library/windows/desktop/ff729480%28v=vs.85%29.aspx
http://www.codeproject.com/Articles/159586/Starting-DirectX-with-Visual-Basic-NET