所以我在使用从串口接收字节的应用程序时遇到了一些麻烦。 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 ..有没有办法可以在接收时写入传入的字节?或者我是以错误的方式解决这个问题。任何帮助都将受到赞赏。