大分隔符的文本文件,我正忙着與一個應用讀取空間分隔的日誌文件從5MB至1GB +大小,然後將此信息存儲到MySQL數據庫,供以後使用時,根據打印報告根據文件中包含的信息。我嘗試/發現的方法,但速度很慢。的讀取和解析VB.net
我做錯了什麼?還是有更好的方式來處理非常大的文本文件?
我使用textfieldparser如下嘗試:
Using parser As New TextFieldParser("C:\logfiles\testfile.txt")
parser.TextFieldType = FieldType.Delimited
parser.CommentTokens = New String() {"#"}
parser.Delimiters = New String() {" "}
parser.HasFieldsEnclosedInQuotes = False
parser.TrimWhiteSpace = True
While Not parser.EndOfData
Dim input As String() = parser.ReadFields()
If input.Length = 10 Then
'add this to a datatable
End If
End While
End Using
這工作,但對於較大的文件很慢。
Function GetSquidData(ByVal logfile_path As String) As System.Data.DataTable
Dim myData As New DataSet
Dim strFilePath As String = ""
If logfile_path.EndsWith("\") Then
strFilePath = logfile_path
Else
strFilePath = logfile_path & "\"
End If
Dim mySelectQry As String = "SELECT * FROM testfile.txt WHERE Client_IP <> """""
Dim myConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilePath & ";Extended Properties=""text;HDR=NO;""")
Dim dsCmd As New System.Data.OleDb.OleDbDataAdapter(mySelectQry, myConnection)
dsCmd.Fill(myData, "logdata")
If Not myConnection.State = ConnectionState.Closed Then
myConnection.Close()
End If
Return myData.Tables("logdata")
End Function
Schema.ini文件:
我然後使用結合一個schema.ini文件寫到預先目錄中的OLEDB連接到文本文件按照以下函數試圖
[testfile.txt]
Format=Delimited()
ColNameHeader=False
Col1=Timestamp text
Col2=Elapsed text
Col3=Client_IP text
Col4=Action_Code text
Col5=Size double
Col6=Method text
Col7=URI text
Col8=Ident text
Col9=Hierarchy_From text
Col10=Content text
任何人有任何想法如何更快地閱讀這些文件?
CNC中 更正上面代碼中的
你可能會考慮使用[LOGPARSER(http://en.wikipedia.org/wiki/Logparser),而不是試圖實現它自己。 – AakashM
這些方法是否一次讀取整個文件?如果你看到你的程序的內存是否超過了你讀取的文件的大小(500MB-1GB)?如果是這樣,您可能需要使用一種讀取文件的方法,該文件一次只能讀取一行文件。 –
@AakashM謝謝你一定會考慮到這一點。 –