【发布时间】:2011-05-03 04:30:48
【问题描述】:
我有一个非常大 (10mb) 的 csv 文件。我解析它并使用通用列表将其放入内存中。
我创建了一个类来表示每一行。这个类只有几个字段(数据类型 ip-address、string)。
我认为由于该文件只有 10 兆字节,因此我可以预期内存中的大小相似。
当我发现创建列表的方法是分配 300 mb 而不是释放它时,我感到非常惊讶。
这是正常的吗?是什么原因造成的。
请注意,csv 文件有很多行 (100 000 +),这可能是一个因素。
命名空间地理 公共类 CountryMarker 公共起始地址作为 IP 地址 公共 EndAddress 作为 IPAddress 公共国家作为字符串 公共 CountryCode 作为字符串 结束类
Public Class Markers
Private Const DatabasePath = "~/App_Data/ip.csv" '10 MB file
Public Shared List As List(Of CountryMarker) = LoadData()
Shared Function LoadData() As List(Of CountryMarker)
Dim Markers As New List(Of CountryMarker)
Using Stream = New IO.FileStream(Hosting.HostingEnvironment.MapPath(DatabasePath), FileMode.Open)
Dim Reader = New StreamReader(Stream)
Do While Reader.Peek > -1
Dim Line = Reader.ReadLine()
Dim Values = Line.Split(",").Select(Function(i) i.Replace("""", ""))
Markers.Add(New CountryMarker With {.Country = Values(5), .CountryCode = Values(4), .StartAddress = IPAddress.Parse(Values(0)), .EndAddress = IPAddress.Parse(Values(1))})
Loop
End Using
Return Markers
End Function
End Class
结束命名空间
【问题讨论】:
-
您想知道为什么会发生这种情况,或者提示另一种加载数据的方式吗?
-
如果我们看到类的定义会有所帮助。人们也可能更愿意帮助您接受对您之前问题的更多回答。
标签: .net performance