我遇到一個常規,做這樣的事情:使用未放棄的內存流返回對象會導致內存泄漏?
static public Bitmap byte2bmp(byte[] BitmapData)
{
MemoryStream ms = new MemoryStream(BitmapData);
return (new Bitmap(ms));
}
我擔心這可能不是最好的推薦的方法。 ms在這種情況下是否正確處置?
或者將結果分配給臨時位圖,丟棄流,然後返回臨時對象會更好嗎?
static public Bitmap byte2bmp(byte[] BitmapData)
{
MemoryStream ms = new MemoryStream(BitmapData);
Bitmap temp=new Bitmap(ms);
ms.Dispose();
return (temp);
}
我希望「使用」可能會在這種情況下使用的,但我不知道它會表現得正確與否:
static public Bitmap byte2bmp(byte[] BitmapData)
{
using(MemoryStream ms = new MemoryStream(BitmapData))
{
return (new Bitmap(ms));
}
}
什麼是最有效的/妥善的解決辦法?謝謝!
@LukeH:我不知道我明白你的意思。 C#規範指出返回表達式將在處理流對象處理的'finally'塊之前被首先評估,所以無論Bitmap構造函數決定做什麼都是無關緊要的。 – 2011-01-05 10:21:46
我錯了,但不是那樣。如果你關閉/處理流,'Bitmap'類*可能會破壞*。來自MSDN:*「您必須保持該流在」Bitmap「的生命週期中保持打開狀態。」* http://msdn.microsoft.com/en-us/library/z7ha67kw.aspx – LukeH 2011-01-05 10:25:35
@LukeH:啊,好的。我以前從未注意到這一點。你現在必須相信什麼原因不會導致任何問題,並且/或者上述代碼的作用不是簡單地依賴實現細節? – 2011-01-05 10:25:46