Как увеличить список (из строки) (в байтах) - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть переменная Queue, в которую я записываю информацию из потока.Переменная инициируется следующим образом:

Public Shared Queue As List(Of String) = New List(Of String)(1024)

Код для чтения потока:

Public Shared Sub ReadStreamForever(ByVal stream As Stream)
    Dim encoder = New UTF8Encoding()
    Dim buffer = New Byte(2047) {}
    Dim counter as Integer = 0
    While True
        If stream.CanRead Then
            Dim len As Integer = stream.Read(buffer, 0, 2048)
            Counter = Counter + 1
            If len > 0 Then
                Dim text = encoder.GetString(buffer, 0, len)
                SSEApplication.Push(text)

            Else
                Exit While
            End If
        Else
            Exit While
        End If
    End While
End Sub

Где метод push просто выполняет несколько операций со строками и добавляет строку за строкой в ​​очередьПеременная

Public Shared Sub Push(ByVal text As String)
    If String.IsNullOrWhiteSpace(text) Then
        Return
    End If

    Dim lines = text.Trim().Split(vbLf)
    SSEApplication.Queue.AddRange(lines)
End Sub

У меня есть разные большие наборы данных, которые я хочу транслировать, но длина очереди после ее заполнения всегда равна 2691, так что, похоже, она немного ограничена в длине.Я просто не знаю, где я ограничиваю переменную очереди и как ее увеличить.Может ли кто-нибудь помочь мне здесь?

1 Ответ

0 голосов
/ 10 декабря 2018

Как правило, List не имеет фиксированной длины, метод Add изменяет размер List и освобождает место для другого элемента.

Если вы хотите иметь фиксированную длину, вы можете использовать простой массив: Dim Queue(1024) As string

Но тогда вы получите исключение при попытке добавить больше элементов, поэтому вы можете проверить условие в методе Push:

If lines.Count < 1024 Then
  SSEApplication.Queue.AddRange(lines)
End If

Эта проверка такжене используйте более 1024 элементов при использовании List, но если у вас есть коллекция фиксированной длины, я бы рекомендовал использовать простой массив.

Полезный ресурс: Массивы в Visual Basic , там вы можетеТакже можно прочитать, как увеличить массив, когда вы хотите добавить дополнительные элементы, используя ключевое слово ReDim.

...