VB.NET:大型阵列 - 更快的替代方案?

时间:2017-05-01 15:22:42

标签: arrays database vb.net

我正在处理一个持续增长的非常大的csv文件。基本上,我的程序检查是否存在特定的ID号。如果存在,则使用数组中的数据。如果它不存在,它会从互联网上下载数据并将其添加到阵列中。

这是我的阵列:

Public Shared ClientSideData(0 To 99999, 0 To 5) As String '"MLS Number","GLA","Latitude","Longitude","Year Built","Acreage","ClientSideNext"

以下是csv文件的示例行:

"21633662","1631","40.298488","-74.052182","1950","0.1791"

这是我用来检查MLS#是否存在的非常简单的函数:

Function ClientSideLoc(mls As String) As Integer
    For i = 0 To GlobalVariables.ClientSideCount - 1
        If GlobalVariables.ClientSideData(i, 0) = mls Then
            Return i
            Exit Function
        End If
    Next
    Return -1
End Function

CSV文件有时每天最多可添加500个条目。它正在快速增长。一旦它超过100,000个条目,我目前的计划是返回并开始用新的条目覆盖早期条目。我觉得这个ClientSideLoc功能最终会减慢我的程序速度,因为我每次都只是从互联网上下载了丢失的信息。

我很好奇是否有更快的选择?你会推荐什么?数据库会是更好的选择吗?我不熟悉他们。谢谢

2 个答案:

答案 0 :(得分:1)

我建议每天将csv文件处理到数据库中的表中。即使像Access这样的东西也适用于此。然后你可以查询数据库表而不用担心内存消耗。

另外:如果您有一个CSV阅读器可以让您高效并将列解析为适当的类型,那么每个记录大约有76个字节:

MLS#:8-char字符串*每个unicode字符4个字节
GLA:4字节int
Lat:8字节双 长:8字节双 年份:4字节int
英亩:8字节双 对象引用:12字节对象引用开销

在100,000条记录中,仍然不到10MB。内存使用不会成为问题。即使是最糟糕的情况,一切都是字符串,总计不到20MB。

鉴于内存确实不会成为问题,您可以使用Dictionary(Of String, Listing),其中Listing是您创建的用于保存这些记录的类。

答案 1 :(得分:0)

字典解决方案正是我所寻求的。没有帮助我的记忆问题,但没关系。现在回答这个问题。谢谢克雷格!