我遇到一个常规,做这样的事情:使用未放弃的内存流返回对象会导致内存泄漏?
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