none
GDI Ressourcen RRS feed

  • Frage

  • Hallo Forum

    Ich hab zwar (fast) mein ganzes Leben lang immer GDI Ressourcen verwendet, aber irgendwie nie so ganz die Frage nach dem CPU-Ressourcenverbrauch gestellt.

    Daher die konkreten Fragen:

    Was macht Windows bei einem "CreateFont"? Wieviel Rechenleistung kostet dieser Befehl? Ist es fahrlässig, den Zeichensatz bei jedem OnPaint (o.ä.) wieder neu zu erstellen?

    Was macht Windows bei einem CreateCompatibleDC? Ist es fahrlässig, einen Memory-DC bei jedem Zeichenaufruf (wenn man z.B. in den Memory-DC zeichnet und dann alles gemeinsam über BitBlt auf den Schirm kopiert) neu zu erstellen? (An dieser Stelle frage ich nicht, ob man das zugeordnete CBitMap Objekt immer wieder neu erstellen kann .. ich tu's nicht).

    Gibt es Dinge, die viel Zeit kosten, an die man normalerweise gar nicht denkt?

    Parallel dazu die Frage:

    Wenn ich ein Kamerasignal mit zusätzlichen Daten und Zeichnungen aufschmücken möchte und dies OHNE FLACKERN auf den Bildschirm (FullScreen) bringen....wie macht man das elegant (ich denke da an Hardwareunterstützung)?

    Grüße

    FireHeart

    Donnerstag, 9. Februar 2017 15:56

Antworten

Alle Antworten

  • Hallo FireHeart,

    Was macht Windows bei einem CreateCompatibleDC? Ist es fahrlässig, einen Memory-DC bei jedem Zeichenaufruf (wenn man z.B. in den Memory-DC zeichnet und dann alles gemeinsam über BitBlt auf den Schirm kopiert) neu zu erstellen?

    Ich bin auf einen aufschlussreichen Artikel gestoßen und ich hoffe, dass er Dir weiterhelfen wird:
    Guide to Win32 Memory DC

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 10. Februar 2017 15:19
    Administrator
  • zunächst mal "wow", das ist eine wirklich ausführliche Abhandlung des Themas ... Danke!

    Ich sehe schon, da gibt's für mich einiges zum Lesen und Nachdenken. Ich hatte ja bisher immer nur mit MFC gearbeitet und dort ist alles schön in Klassen gekapselt. Wenn ich also in der OnPaint Routine ein CFont Objekt lokal erstelle und dann verwende, dann wird wohl der Destruktor des CFont Elements am Ende der Routine auch ein DeleteObject ausführen. Was macht Windows eigentlich bei einem CreateObject wirklich? Es wird ja wohl nicht tausende kleine Bitmaps mit den einzelnen Buchstaben anlegen, oder?

    Grüße

    FireHeart

    Dienstag, 14. Februar 2017 12:54
  • Was macht Windows bei einem CreateCompatibleDC? Ist es fahrlässig, einen Memory-DC bei jedem Zeichenaufruf (wenn man z.B. in den Memory-DC zeichnet und dann alles gemeinsam über BitBlt auf den Schirm kopiert) neu zu erstellen? (An dieser Stelle frage ich nicht, ob man das zugeordnete CBitMap Objekt immer wieder neu erstellen kann .. ich tu's nicht).

    Das ganze kostet bei einer Bildgröße 1680 x 1050 gerade mal 1,6ms (komplette Draw Methode, inkl. Darstellungsberechnungen) - wie ich in einem alten Performance Report nachlesen kann, inzwischen vermutlich noch weniger. Keine Ahnung inwiefern das ein relevantes Problem bei Dir sein könnte. Speicher durchgängig zu blockieren ist vielleicht auch nicht so toll.

    - Gruß Florian

    Mittwoch, 15. Februar 2017 09:44
  • Hallo internal access 54,

    Der wirklich aufwendige Befehl ist allerdings BitBlt, da dieser ja die gesamten Pixel kopiert, was je nach CPU mehr oder weniger Zeit kostet. Daher ist für hohe Frameraten auch eher DirectX zu empfehlen. (für Videos ohnehin Media Foundation, um diesen ganzen GDI-Bereich zu umgehen)

    Inwiefern könnte DirectX, für die relativ simple Anforderung, hier, in Bezug auf die Framerate, von Nutzen sein und von welchen "hohen" Frameraten (siehe dazu auch meine vorherige Antwort) reden wir hier?

    Anders gesagt, ich verstehe die Kritik an BitBlt nicht, die Dauer erscheint mir doch eher vernachlässigbar.


    - Gruß Florian

    Mittwoch, 15. Februar 2017 10:39