Wir müssen das Text-Rendering für eine C# Windows Forms Anwendung optimieren, die eine große Anzahl kleiner Strings in einem unregelmäßigen Raster anzeigt. Zu jeder Zeit können weit über 5000 Zellen sichtbar sein, die 4 mal pro Sekunde aktualisiert werden. Die Schriftfamilie und -größe ist in allen Zellen konsistent, obwohl die Farbe von Zelle zu Zelle variieren kann, ebenso wie fett/kursiv/plain.Schnellste API zum Rendern von Text in Windows Forms?
Ich habe widersprüchlichen Informationen im Internet gesehen zu TextRenderer.DrawText
vs. Graphics.DrawString
die schnellsten/besten, was zu einem GDI vs. GDI+ Vergleich auf Win32 Ebene reduziert.
Ich habe auch radikal andere Ergebnisse auf Windows XP im Vergleich zu Windows Vista gesehen, aber mein Hauptziel ist Windows XP. Artikel vielversprechende große Fortschritte unter WinFX und DirectX 10 sind hier nicht hilfreich :-)
Was ist der beste Ansatz hier? Ich habe keine Angst davor, eine kleine C++/CLI-Schicht einzuführen und die Gerätekontextbearbeitung zu optimieren, um mehr Leistung herauszuholen, aber ich hätte gerne einen definitiven Ratschlag, welche Richtung einzuschlagen ist.
EDIT: Danke für die ersten Antworten. Ich werde eine Kombination aus Hintergrund-Bitmap-Rendering und Kleben mit den GDI-äquivalenten Anrufen versuchen.
Die Beispiel-App im Blog-Link ist die, die ich verwendet habe, als ich den großen Unterschied zwischen Vista und XP sah - auf meinem Vista-PC waren GDI und GDI + gleich, während auf XP ich den 6x Unterschied sehe, den der Autor erwähnt. Dies ist wahrscheinlich ein Vista-Treiber-Problem, aber einige der Schwierigkeiten hier hervorgehoben - danke! –
Historischer Hinweis: ExtTextOut war früher der schnellste Weg, um ein festes Rechteck auf einigen Karten/Treibern zu zeichnen :) –