我正在处理一个持续增长的非常大的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功能最终会减慢我的程序速度,因为我每次都只是从互联网上下载了丢失的信息。
我很好奇是否有更快的选择?你会推荐什么?数据库会是更好的选择吗?我不熟悉他们。谢谢
答案 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)
字典解决方案正是我所寻求的。没有帮助我的记忆问题,但没关系。现在回答这个问题。谢谢克雷格!