Laden...

Bitmaps aus Resource?

Letzter Beitrag vor 15 Jahren 2 Posts 711 Views
Bitmaps aus Resource?

Hallo,

vorneweg: Ich entwickle ein Program für Windows Mobile, d.h. Speicherbedarf und Performance sind sehr wichtig.

Folgendes:
Mein Program enthält einige kleine Grafiken, die an verschiedenen Stellen per GDI gezeichnet werden.

Bisher habe ich die Grafikendateien (.png) immer ganz einfach zur Resources.Resx hinzugefügt und im Program dann einfach direkt gezeichnet, also so
g.DrawImage(Resources.MyBitmap, ..., ...)

Nun habe ich festgestellt, dass diese Methode extrem langsam ist. In meinem Program muss diese Grafik oftmals häufig gezeichnet werden und auf diese Weise muss das Bitmap scheinbar erst jedes Mal aus der Resource geholt werden.

Ich habe festgestellt, dass es sehr viel schneller geht, wenn ich die Grafik in ein Bitmap Objekt lade und dann im weiteren Program immer nur das Bitmap zeichne. Also so:
Bitmap bmp = Resources.MyBitmap;
...
g.DrawImage(bmp, ..., ...)

So, durch das zusätzliche Bitmap Objekt habe ich aber natürlich jetzt einen höheren Speicherbedarf.

Meine Idee ist es nun, eine statische "BitmapPool" Klasse zu erstellen. Beim ersten Zugriff auf eine Grafik wird darin ein Bitmap Objekt aus der Resource erzeugt. Bei allen weiteren Zugriffen wird direkt das Bitmap Objekt zurückgegeben. Also so:


public static class BitmapPool
    {
        static Bitmap myBitmap;
        public static Bitmap MyBitmap
        {
            get
            {
                if (myBitmap == null)
                    myBitmap = Resources.MyBitmap;
                return myBitmap;
            }
        }

    }

Meine Frage ist nun: Ist das wirklich ein sinnvoller Ansatz oder gibt es da eine viel bessere/elegantere Lösung?

Gruß
Thomas

Hallo ThomasR,

... auf diese Weise muss das Bitmap scheinbar erst jedes Mal aus der Resource geholt werden.

nicht scheinbar sondern anscheinend. 😃 Oder mit anderen Worten: Du hast mit der Vermutung, dass die Ressource jedes Mal neu geladen wird, vollkommen recht.

Meine Idee ist es nun, eine statische "BitmapPool" Klasse zu erstellen.

Statische Klassen sind nicht so toll. Wenn du die Bitmaps nur in einer bestimmten Klasse brauchst, solltest du sie dir dort merken. Wenn du die Bitmaps an vielen verschiedenen Stellen brauchst, kann aber so eine statische Klasse als Cache das Leben schon leichter machen.

herbivore