我在vb.net中开发了一些代码,用于从命令行获取用户输入,逐行搜索大型日志文件(~10-40GB),然后在匹配行的任一侧输出一千行到一个文本文件。
应用程序正在运行,但它只在我的机器上使用最少量的资源;大约28mb RAM / 4GB& 〜1%CPU / 3.1GHz双核I3)并且需要花费数小时来搜索文件,这是不理想的。
由于资源不是这个特定程序的问题,有没有办法提高搜索文件的速度,或者是否存在外部限制,例如磁盘读取速度?
我知道我可能会遗漏一些明显的东西,但我所看到的一切似乎都是关于复杂程序的多线程,同时发生了很多事情。
Sub SearchFile(ByVal FullPath As String, SearchText As String)
Dim CurLine As Long = 0, FoundLine As Long
Dim Timer As Long = 0
Dim PerText As Integer
Dim Found As Boolean = False
Using ReadStream = File.Open(FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite), objReader As New StreamReader(ReadStream)
Do While objReader.Peek <> -1 And Found = False
CurLine = CurLine + 1
'Displays Percentage of file searched.
If CurLine > Timer + 50000 Then
Console.Write(vbBack & vbBack & vbBack)
PerText = (objReader.BaseStream.Position / objReader.BaseStream.Length) * 100
Console.Write(PerText & "%")
Timer = CurLine
End If
If InStr(objReader.ReadLine, SearchText)
FoundLine = objReader.BaseStream.Position
Found = True
ReadLines(FoundLine, FullPath, SearchText)
End If
Loop
objReader.Close()
End Using
If Found = False Then MsgBox("Not Found")
End Sub