Das || sollte doch bestimmt eher ein && sein?
Man sieht übrigens kein using() oder .Dispose() - Je nachdem wie oft
deine TwoInOnePicture() aufgerufen wird könnte das problematisch
werden...
Ich versteh eigentlich die ganze Fragestellung nicht.
Was soll
> ich würde einen Buffer für Bitmaps benötigen, da ich manchmal> ein NULL zurückbekomme als Bitmap1 oder Bitmap2
bedeuten.
bitmap1 bzw. bitmap2 sind doch offenbar irgendwelche globale Bitmaps,
die zu einem kompletten Bild zusammengesetzt werden sollen. Zumindest
versteh ich den Code beim schnellen Querlesen so.
Wenn also bitmap1 bzw. bitmap2 NULL sind, dann heißt das doch, das es
genau diese Bitmaps eben nicht gibt. Wie soll man aber eine einzelne
Bitmap mit einer anderen nicht existenten Bitmap zu einem 2-Bitmap Bild
zusammensetzen? Das heißt für mich: was du brauchst ist nicht irgendein
ominöser Buffer, sondern eine entsprechende Programmlogik, die mit
diesem Fall klar kommt, das diese Funktion aufgerufen wird, obwohl es
nur eine Ausgangsbitmap gibt.
Manu schrieb:> Wie wende ich denn das Using() in der Funktion genau an?
Wenn du schon kein C#-Buch hast, dann leg dir wenigstens in deinem
Browser einen Bookmark auf Google. Dort gibst du ins Suchfeld "C# using"
ein und hantelst dich durch.
Sorry wenn das jetzt unfreundlich klingt. Aber Informationen suchen und
finden gehört zum Handwerkszeug eines Programmieres mit dazu, wie in
Bayern ein Bier zu einer Brotzeit dazu gehört.
Ohne wird das nichts und am Besten ein ausführliches Tutorial
durcharbeiten, da ich aber keines kenne, bleibt als optimale Alternative
nur noch ein C#-Buch.
Dieses Buch hat nicht umsonst ein paar hundert Seiten. Die hat es
sicherlich nicht, weil man C# nach der Methode "Try&Error" auf eigene
Faust in ein paar Nachmittagen lernen kann.
http://msdn.microsoft.com/de-de/library/yh598w02(v=vs.80).aspx
Microsoft hat die komplette C# Doku online. Du musst sie nur lesen - was
allerdings nur insofern weiter hilft, wenn du weißt, was du eigentlich
brauchst. Womit dann wieder die Literatur ins Spiel kommt.
wird eine neue Bitmap angelegt, die kurze Zeit später keiner mehr
braucht. Also wozu soll das Objekt im Speicher rumlungern, bis es vom
Garbage Collector entsorgt wird, wenn man selbst sehr genau weißt, dass
diese Bitmap nach ein paar Schritten weiter im Programm nicht mehr
benötigt wird?
max schrieb:> Huch, ich hatte gedacht, dass die Objekte automatisch nach dem Ende der> Funktion gelöscht werden. Wieder was gelernt...
C++ schon.
C# nicht. Da räumt der Garbage Collector irgendwann auf. Wann genau, das
steht in den Sternen. Wann gerade Zeit ist, oder wenn der Speicher zur
Neige geht, oder wenn Windows fad ist oder ....
Selbiges ja auch hier
die ganzen Rectangles und Pens lungern im Speicher rum, bis jemand
aufräumt.
Gut, das ist jetzt nicht DER Speicherverbrauch, aber ... es läppert
sich, wenn die Funktion nur oft genug aufgerufen wird.
Karl Heinz Buchegger schrieb:> Gut, das ist jetzt nicht DER Speicherverbrauch, aber
Der Speicherverbrauch ist auch nicht der Grund warum Bitmap (und auch
Pen) IDisposable implementieren.
Es gibt im System noch mehr Resourcen die Endlich sind, z.B. GDI
Handles. Der GC räumt nur auf wenn er der Meinung ist er müsste das tun.
Zu der Überzeugung kann er kommen wenn der Arbeitsspeicher sich füllt,
"unmanaged resources" wie die GDI Handles (oder auch File Handles) hat
er dagegen nicht im Blick.
Es kann also passieren dass noch massig Ram frei ist, der GC damit nicht
aktiv wird, aber trotzdem keine freien GDI Handles mehr da sind - weil
die eben erst freigegeben werden wenn der GC ein Dispose() erzwingt.