VB.net从数组中获取每个第n条记录

问题描述 投票:0回答:2

我有动态数组,每分钟收到数千条记录,我试图实现:

使用计时器我需要从主阵列中获取记录。每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个下一条记录。

arrays vb.net
2个回答
0
投票

在类中,您定义了定时器,您需要定义私有整数变量,假设countOfReads将指示从数组中读取元素的次数。

然后你可以使用它从数组中获取数据 - 20*countOfReads20*(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

0
投票

如果你想快速,你不应该调整数组的大小。在这种情况下,列表应该更合适。对于两者,您应该记住Int32.MaxSize的最大大小(大约2亿)。

示例(仍需要一些错误检查等):

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
© www.soinside.com 2019 - 2024. All rights reserved.