接收图像时出现System.OutOfMemoryException

时间:2014-05-19 15:57:44

标签: c# image networking out-of-memory memorystream

我正在尝试使用tcp(NetworkStream)和内存流传输图像。 我试过这段代码(客户端):

BinaryReader breader = new BinaryReader(stream);
                int ctBytes = breader.ReadInt32();
                MemoryStream ms = new MemoryStream(breader.ReadBytes(ctBytes));
                Image img = Image.FromStream(ms);

并且异常发生在第3行。实际上,此代码位于循环内,并且在第一次迭代中不会抛出异常。 服务器代码(如果需要):

BinaryWriter bWriter = new BinaryWriter(writer.BaseStream);
       MemoryStream ms = new MemoryStream();
       img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
       byte[] buffer = new byte[ms.Length];
       ms.Seek(0, SeekOrigin.Begin);
       ms.Read(buffer, 0, buffer.Length);
       bWriter.Write(buffer.Length);
       bWriter.Write(buffer);

感谢。

1 个答案:

答案 0 :(得分:0)

您需要处置资源:

using(BinaryWriter bWriter = new BinaryWriter(writer.BaseStream))
using(MemoryStream ms = new MemoryStream())
{
   img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
   byte[] buffer = new byte[ms.Length];
   ms.Seek(0, SeekOrigin.Begin);
   ms.Read(buffer, 0, buffer.Length);
   bWriter.Write(buffer.Length);
   bWriter.Write(buffer);
}

通过using子句,资源在块结束时释放。

你必须在客户端做同样的事情。