Kaeyu Geschrieben 21. August 2010 Geschrieben 21. August 2010 Hallo, ich spiele aktuell ein wenig mit VB.Net rum. Habe mir eine Form gebaut die mir alle 10ms ein Bild (basierend auf PictureBox) erstellt, welches sich dann für 1000ms in der Form bewegt und sich dann selbst zerstört (eigene Klasse mit zusätzlichen Funktionen eines Timers). Ab ca. 20 Bildern sinkt die Framerate drastisch. Von einem Ausgangswert von 60 krückt das Programm nurnoch auf etwa 29~30 rum und das ist kein schöner Anblick Anfangs hat das Programm bis zu 40 Mb Arbeitsspeicher verschlungen. Nach einigen Optimierungen frisst es nicht mehr wie 14 Mb. Transparenz ist in keinem Bild vorhanden. Bei den Bildern handelt es sich um eine .GIF-Datei die 59 Bytes klein ist. Double Buffer auf true macht nix. Gibt es eine Möglichkeit, möglichst ohne DirectX oder anderen "Erweiterungen", die Performance zu erhöhen? Bzw. gibt es eine Möglichkeit die Grafikkarte hierfür einzubeziehen? Die Grafikkarte gurkt auf 0% Auslastung rum während das Programm läuft, daher wird sie sich wohl nicht um die Anzeige kümmern Bevor jetzt wer meint "Hol dir halt nen schnelleren Prozessor": Eine CPU mit mehr als 2.7 Ghz je Prozessor als Quadcore sollte keine Mindestanforderung für ein Programm sein. Hoffe auf Antworten^^ Zitieren
ToolsDevler Geschrieben 23. August 2010 Geschrieben 23. August 2010 Hi, spricht was dagegen einfach ein animiertes Gif zu machen? Schau dich hierzu ma dort um GiffiG.de - Erstellen von animierten Gif Bildern mittels Freeware Solltest du nichts passendes finden, könntest du vllt hier noch Glück haben: GIF Animation: Software zum Animated GIF erstellen Hoffe das hilft weiter. ToolsDevler Zitieren
realgun Geschrieben 23. August 2010 Geschrieben 23. August 2010 Ich vermute mal das Du die Ressourcen (also die Bilder) nicht wieder frei gibst. Wie erstellst Du denn Bild (Image - Objekt?) bzw. PictureBox? Du solltest beides mit Dispose() wieder freigeben wenn Du es nicht mehr brauchst (bzw. mit using instanziieren). Vielleicht kannst Du ja die Stellen Code posten, wo Du die Bilder anzeigst? Zitieren
ToolsDevler Geschrieben 24. August 2010 Geschrieben 24. August 2010 (bearbeitet) Ui.. hab mir die Frage grad nochmal durchgelesen und gemerkt, dass ich n bisschen was anderes verstanden habe... sry. Wenn du den Code postest, wäre es einfacher performancetechnische Probleme zu finden. Grüße ToolsDevler Bearbeitet 24. August 2010 von ToolsDevler Zitieren
Klotzkopp Geschrieben 24. August 2010 Geschrieben 24. August 2010 Gibt es eine Möglichkeit, möglichst ohne DirectX oder anderen "Erweiterungen", die Performance zu erhöhen?Warum schließt du die offensichtliche und vermutlich effizienteste Möglichkeit der Performancesteigerung von vornherein aus? Ist deine Animation in irgendeiner Weise interaktiv? Falls nicht, könntest du das vorher rendern und dann hinterher einen Film abspielen. Zitieren
Kaeyu Geschrieben 24. August 2010 Autor Geschrieben 24. August 2010 (bearbeitet) Doch klar, der Speicher wird wieder freigegeben. Das hatte ich beim ersten Versuch außer acht gelassen. Daher war das Programm anfangs immer auf bis zu 40 Mb gestiegen. Nun ist die Anfangsgröße ca 12 Mb und Endgröße maximal 14 Mb, nachdem 500 Objekte durchgerauscht sind. Ja, die Bilder sind "interaktiv". Es erfolgt eine Tastenabfrage in einem bestimmten Zeitfenster bzw. in einem bestimmten Bereich im Fenster. Ich weiß wohl, dass DirectX eine effektive und hierfür auch die wohl beste Methode ist. Allerdings habe ich zur Zeit 0 Zeit mich in dieses Thema einzuarbeiten - ist aber geplant Nur, solange diese Zeit nicht gekommen ist, wollte ich mal schauen ob es noch andere Lösungen gibt. Eine Alternative die mir heute eingefallen ist wäre es das Ganze mit GDI zu machen und die Tastenabfrage mit Hilfe von Vektoren und/oder Matrizen zu unterstützen oder die jeweilige Klasse um Koordinatenattribute zu erweitern, damit ich weiß welches Objekt grad wo ist. Wieviel schneller es dann ist, ist eine andere Frage. Bearbeitet 24. August 2010 von Kaeyu Zitieren
Kaeyu Geschrieben 7. September 2010 Autor Geschrieben 7. September 2010 Sry für Doppelpost. Thread kann geclosed/-löscht werden^^ Habe es mit GDI probiert und das sollte locker ausreichen. GDI nutzt ja die Grafikkarte - habs ausprobiert. Die Framerate sprengt schon jetzt alles was ich mir erträumt habe. Dann kann ich DirectX auch erstmal wieder abhaken - brauch ich bei dem Ergebnis nicht mehr Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.