我有一个动态数组,每分钟接收数千条记录,我正在尝试实现:
使用计时器我需要从主数组中获取记录。每1秒的进程应访问主数组并获取20条记录,然后在第二秒后将获取接下来的20条记录,依此类推...
实现此目标的最佳和最快方法是什么?
我有一个主数组,其中包含成千上万条不断增长的记录:
Public Shared myBigArray() As String = {}
使用以下命令将新项目添加到数组中
Module Module2
<Extension()>
Public Sub Add(Of T)(ByRef arr As T(), item As T)
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = item
End Sub
End Module
myBigArray.Add(message)
要将记录从主数组复制到新数组,我使用:
Array.Copy(myBigArray, smallArray, 20)
我需要循环复制过程,以便它复制新记录,每个请求复制20条下一条记录。
答案 0 :(得分:0)
在课堂上,您定义了计时器,您需要定义私有整数变量,假设countOfReads
将指示读取数组元素的次数。
然后,您可以使用它来从数组中获取数据-20*countOfReads
在20*(countOfReads+1) - 1
和countOfReads
之间的条目从0开始(第一次读取,因此索引将在0到19之间),等
用法:
For i = countOfReads * 20 To (countOfReads + 1)*20 - 1)
' fetch your elements with myArray(i)
Next
' increment counter
countOfReads = countOfReads + 1
答案 1 :(得分:0)
如果需要快速,则不应该调整数组的大小。在这种情况下,列表应该更合适。两者都应牢记Int32.MaxSize的最大大小(约20亿)。
示例(仍然需要进行一些错误检查等):
Imports System
Imports System.Collections.Generic
Public Module Module1
Public Sub Main()
Dim myBigList as New List(of string)
'debug: fill with random nu
For i As Integer = 1 To 100
myBigList.Add("string_" & i)
Next
Dim _startpos As Integer = 0
For i As Integer = 1 to 5
Console.WriteLine("_startpos:" & _startpos )
For Each _s As String in myBigList.GetRange(_startpos,20)
Console.WriteLine(_s)
Next
_startpos += 20
Next
End Sub
End Module