Bitmap in List<> zwischenspeichern

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Chrisber.

    Bitmap in List<> zwischenspeichern

    Dieser Post bezieht sich auf [C#] Periodisch Screenshots erstellen.

    Hallo ihr lieben,
    eine Frage hätte ich da noch ^^

    Periodisch die Screenshots zu erstellen klappt wunderbar. Nun habe ich vor die Methode etwas zu optimieren.
    Dazu habe ich vor alle erstellen Bitmaps zunächst in einer List "zwischenzuspeichern" um sie dann erst bei Bedarf auf die Festplatte zu schreiben.

    Nun meine Frage wie stelle ich das am besten an?
    Mein bisheriger Versuch bestand darin, zunächst eine Liste zu erstellen

    Quellcode

    1. private List<Bitmap> tmpList = new List<Bitmap>();

    Und dann wann immer ich einen Screenshot mit meiner Mehtode CaptureScreen erstelle, diesen der Liste hinzuzufügen statt ihn direkt zu speichern.

    Quellcode

    1. Statt b.Save tmpList.add(b)


    Jedoch tauchen hier meine ersten Probleme auf.
    Wann ist es nun am geschicktesten die Bitmap zu disposen?

    Und den nächsten Fehler erhalte ich wenn ich die Liste auselesen will.
    Eigentlich dürfte das ja mit einer for each schleife gehen.

    Quellcode

    1. foreach (Bitmap item in bList)
    2. {
    3. Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in System.Drawing.dll aufgetreten.
    4. Zusätzliche Informationen: Ungültiger Parameter.
    5. item.Save(...
    6. }


    Ich steh was das angeht gerade vollkommen auf dem Schlauch.

    Schonmal danke für eure Denkanstöße.

    PS: Ist mein Vorhaben überhaubt machbar? Sprich das zwischenspeichern?
    Oder hat ggf. Bitmap.Save(Stream ... ) was damit zu tun?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MrCrunch“ ()

    Tritt das beim 1. Aufruf auf oder beim nächsten?
    Abgearbeitete Items solltest Du löschen, um mehrfaches Speichern zu vermeiden.
    Bei welcher Zeile tritt denn der Fehlar auf?
    Welche Argumente stehen da drin?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    sowas löst man üblicherweise über Pooling. Da ich nur von C++ bzw. unmanaged Pattern sprechen kann, weiß ich nicht, ob es die beste Lösung auch für .NET darstellt.

    Heißt, du reservierst dir einen großen Batzen speicher (oder mehrere, mit halb-statischen Array), die immer bestehen bleiben. Davon hast du dann meinetwegen 20 Stück, und sobald du mehr als 20 Bitmaps hast, machst du einen Save. Der Speicher bleibt bestehen, leeren brauchst du ihn nicht. Einfach von vorne wieder überschreiben.

    Fragt sich nur, ob das sinnvoll ist. Denn der Flaschenhals wird hier garantiert die Festplatte sein. Und ob 20 Bitmaps auf einmal zu speichern schneller sein soll, als ein einzelnes, wage ich zu bezweifeln.

    Schon mal an Streams mit Parallelisierung gedacht?
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.