这是从网络流(vb.net)读取的最佳代码吗?

这是从网络流(vb.net)读取的最佳代码吗?,.net,vb.net,arrays,performance,.net,Vb.net,Arrays,Performance,我知道这是主观的,但这是我根据上一个问题的答案得出的结果,似乎有点“拼凑”,因为我对它做了很多修改: Private Function ReadFromBuffer(ByVal objReader As NetworkStream) As Byte() Dim intRead As Integer = 1024 Dim allBytes(-1) As Byte While intRead = 1024 Dim byteTempbuffer(1023)

我知道这是主观的,但这是我根据上一个问题的答案得出的结果,似乎有点“拼凑”,因为我对它做了很多修改:

  Private Function ReadFromBuffer(ByVal objReader As NetworkStream) As Byte()
    Dim intRead As Integer = 1024
    Dim allBytes(-1) As Byte

    While intRead = 1024
        Dim byteTempbuffer(1023) As Byte
        intRead = objReader.Read(byteTempbuffer, 0, 1024)
        ReDim Preserve byteTempbuffer(intRead - 1)
        Dim tempold(allBytes.Length - 1) As Byte
        tempold = allBytes
        allBytes = tempold.Concat(byteTempbuffer).ToArray
    End While

    Return allBytes
End Function
基本上,有没有更好的编写方法(哪怕只是部分代码)或更有效的方法?

基本上,代码是用来一次从1024字节的网络流中读取所有字节的。每次读取字节时,它都会将其放入一个数组中并返回


我认为如果
intRead
小于1024,则最好只使用Redim
byteTempbuffer
(Redim是为了防止在网络流中剩余的1024字节不足时将空字节添加到数组的末尾)(基本上,每次重拨或者只在需要时执行if语句和重拨更有效)

这绝对不是最好的方法:在循环的每次迭代中,您都分配一个新的缓冲区,比前一个缓冲区大……这可能会给GC带来很大的压力

如果您不知道数据的总长度,可以使用
MemoryStream

Private Function ReadFromBuffer(ByVal objReader As NetworkStream) As Byte()
    Dim intRead As Integer = 1024
    Dim byteTempbuffer(1023) As Byte
    Dim allBytes As New MemoryStream

    While intRead = 1024
        intRead = objReader.Read(byteTempbuffer, 0, 1024)
        allBytes.Write(byteTempbuffer, 0, intRead)
    End While

    Return allBytes.ToArray()
End Function

谢谢,我想有更好的方法:)我想这应该放在codereview.stackexchange.com上