2017-05-01 5 views
-4

Was passiert mit dem Bild in "gerendert" einmal mit Block verfügt über "b"?Umfang der Verwendung von Block auf einer externen Variablen

Bitmap rendered; 

using(Bitmap b = new Bitmap(calcHeight, calcWidth)) 
{ 
    using (Graphics g = Graphics.FromImage(b)) 
    { 
     RenderMyBitMap(ref b); 
     rendered = b; 
    } 
} 
//Outside Using block 
DoSomeThingElseWith(rendered); 
+3

Warum versuchen Sie es nicht und sehen Sie selbst? –

+0

Da es immer noch einen Hinweis auf "b" gibt, wird es nicht in der Garage gesammelt. Wenn 'gerendert' auf Null gesetzt ist, wird es im nächsten Zyklus der Garagensammlung weggenommen. –

+0

Ich habe keinen Fehler gesehen. Konnte nicht finden, wenn ich Speicher auffülle (eine OOM-Ausnahme, die darauf wartet, passiert zu werden) oder es ist sicher. Black Frog Antwort scheint gerechtfertigt zu sein. Aber kann es nicht überprüfen. –

Antwort

0

Die variablen rendered Punkte auf der gleichen Instanz wie b. Wenn Sie es nach dem using Block zuzugreifen versuchen, erhalten Sie eine ObjectDisposedException, erhalten die

Die Ausnahme ist, die ausgelöst wird, wenn eine Operation auf einem angeordneten Objekt durchgeführt wird.

Verwandte Themen