保持 MemoryStream 打开或克隆图像

Keeping MemoryStream open or clone image

我正在从数据库中读取图像。 我读取了一个字段的二进制/blob,并将其转换为这样的图像:

Public Function BytesToImage(ByVal ByteArr() As Byte) As Image

    If ByteArr.Length < 1 Then
        Return Nothing
    End If

    Dim ImageStream As MemoryStream  'Needs to stay open for the image's life-time

    Dim nImage As Image = Nothing

    Try
        ImageStream = New MemoryStream(ByteArr)
        nImage = Image.FromStream(ImageStream, True)
    Catch ex As Exception
        nImage = Nothing
    End Try

    Return nImage

End Function

我无法使用 "Using nImageStream As New MemoryStream(ByteArr)",因为图像会在一段时间后变为 "dead"。 根据文档,MemoryStream 需要在图像的生命周期内保持打开状态。

现在我想知道实际上什么是最好的。 我是应该不关心 MemoryStream 而只是接受它在那里并且仍然打开 "in the background",还是我应该克隆图像并关闭 memorystream?

根据 JonSkeet in this question,您无需担心保留引用。

由于您的代码中已经有一个 Try/Catch,将其归结为:

Public Function BytesToImage(ByVal ByteArr() As Byte) As Image
    Try
        Return Image.FromStream(New MemoryStream(ByteArr), True)
    Catch ex As Exception
        Return Nothing
    End Try
End Function