我遇到了一个类似于这样的例程,它会执行以下操作:
什么是最有效/合适的解决方案?谢谢!
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);
}
我希望在这种情况下可以使用“using”关键字,但不确定它是否能够正常工作:
static public Bitmap byte2bmp(byte[] BitmapData)
{
using(MemoryStream ms = new MemoryStream(BitmapData))
{
return (new Bitmap(ms));
}
}
什么是最有效/合适的解决方案?谢谢!
finally
块之前,将首先评估返回表达式,因此无论Bitmap
构造函数决定做什么都是无关紧要的。 - Cody GrayBitmap
类可能会损坏。从MSDN上可以看到:"必须在Bitmap
的生命周期内保持数据流开放状态。" http://msdn.microsoft.com/en-us/library/z7ha67kw.aspx - LukeHBitmap
类不应该/不会这样做,因为这是个坏习惯。但很不幸,我错了,因为它确实这样做了。(可能它内部持有流的引用,然后稍后重复使用它,而不是在第一次调用构造函数时急切地将流转换为byte[]
或其他形式。) - LukeH