我有一個非常大的(10mb)csv文件。我解析它並使用通用列表將其存入內存。把csv文件放入內存
我創建了一個類來表示每一行。這個類只有幾個字段(數據類型IP地址,字符串)。
我認爲,由於該文件只有10兆字節,我可以預期內存大小相似。
當我發現創建列表的方法是分配300 MB並且沒有釋放它時,我感到非常驚訝。
這是正常的,什麼可以造成這種情況。
請注意,csv文件有很多行(100 000+),這可能是一個因素。
命名空間地理 公共類CountryMarker 公共StartAddress作爲ip地址 公共EndAddress作爲ip地址 公共國家作爲字符串 公共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
末命名空間
你想知道爲什麼會發生這種情況,或提供另一種加載數據的方式? – 2011-05-03 04:32:17
如果我們看到類的定義,這將有所幫助。人們也可能更願意幫助您接受針對您以前的問題的更多答案。 – 2011-05-03 04:33:12