写入缓冲区时vb.net system.outofmemoryexception

时间:2014-05-22 13:48:27

标签: vb.net winforms

所以我在使用从串口接收字节的应用程序时遇到了一些麻烦。 SerialPort1_DataReceived事件中出现此问题。我使用的机器通过串口发送二进制文件,并将每个字节写入缓冲区。它将发送的最大字节数为32mb。以下是我的声明:

Dim count As Integer = 35000000
Dim buffer(count - 1) As Byte
Dim readBytes As Integer
Dim totalReadBytes As Integer
Dim offset As Integer
Dim remaining As Integer = count

我公开声明这些。

这是我读取字节的代码,这是在SerialPort1_DataReceived事件中:

SerialPort1.BaudRate = 230400
SerialPort1.ReadTimeout = 5000

Try
 Do
  readBytes = SerialPort1.Read(buffer, offset, remaining)
  offset += readBytes
  remaining -= readBytes
  totalReadBytes += readBytes
 Loop While remaining > 0 AndAlso readBytes > 0

 Catch ex As System.TimeoutException
   milking_binary = False
   ReDim Preserve buffer(totalReadBytes - 1)

   oFileStream = New System.IO.FileStream(selected_file, System.IO.FileMode.Create)
   oFileStream.Write(buffer, 0, buffer.Length)
   oFileStream.Close()
   MsgBox("Milk Complete", MsgBoxStyle.Information)
   SerialPort1.ReadTimeout = 160000
   SerialPort1.BaudRate = 115200
   idle = True

   count = 35000000
   readBytes = 0
   totalReadBytes = 0
   offset = 0
   remaining = count

   ReDim buffer(count - 1)

   set_info()
 End Try

它的作用是,每次接收到一个字节时,它都会将其写入缓冲区,缓冲区大小设置为35mb。然后,当它超时时,意味着不再接收字节,它使用文件流并将缓冲区写入文件流。 (我可能没有正确解释这个,但这不是我需要帮助的)。如果接收的字节数很少,这种方法很有用..但是如果接收到的字节大于15mb,则会崩溃整个应用程序并给我一个错误:

System.OutOfMemoryException

我的猜测是缓冲区使用了太多ram ..有没有办法可以在接收时写入传入的字节?或者我是以错误的方式解决这个问题。任何帮助都将受到赞赏。

0 个答案:

没有答案