1

我有一个简单的程序,它读取一个 .txt 文件,然后将其拆分为多个“pMaxRows”行数的文件。这些 .txt 文件很大——有些接近 25Gb。现在它的运行速度还不够快,我不喜欢,我觉得应该有一种方法可以通过一次读取/写入多行来提高效率,但是我对 vb.net streamreader/streamwriter 不是很有经验。

代码如下:

Public Sub Execute(ByVal pFileLocation As String, _
                   ByVal pMaxRows As Int32)

    Dim sr As IO.StreamReader
    Dim Row As String
    Dim SourceRowCount As Int64
    Dim TargetRowCount As int64
    Dim TargetFileNumber As Int32
    ''Does the file exist in that location?
    If IO.File.Exists(pFileLocation) = False Then
        Throw New Exception("File does not exist at " & pFileLocation)
    End If

    ''Split FileLocation into FileName and Folder Location
    Dim arrFileLoc() As String = pFileLocation.Split("\")
    Dim i As Integer = arrFileLoc.Length - 1
    Dim FileName As String = arrFileLoc(i)
    Dim FileLocationLength As Integer = pFileLocation.Length
    Dim FileNameLength As Integer = FileName.Length
    Dim Folder As String = pFileLocation.Remove(FileLocationLength - FileNameLength, FileNameLength)



    ''Read the file
    sr = New IO.StreamReader(pFileLocation)
    SourceRowCount = 0
    TargetRowCount = 0
    TargetFileNumber = 1


    ''Create First Target File Name
    Dim TargetFileName As String
    TargetFileName = TargetFileNumber & "_" & FileName

    ''Open streamreader and start reading lines
    Do While Not sr.EndOfStream


        ''if it hits the target number of rows: 
        If (TargetRowCount = pMaxRows) Then

            ''Advance target file number
            TargetFileNumber += 1
            ''Create New file with target file number
            TargetFileName = TargetFileNumber & "_" & FileName

            ''Set target row count back to 0
            TargetRowCount = 0

        End If
        ''Read line
        Row = sr.ReadLine()

        ''Write line
        Using sw As New StreamWriter(Folder & TargetFileName, True)
            sw.WriteLine(Row)
        End Using

        SourceRowCount += 1
        TargetRowCount += 1

    Loop
End Sub

有人有什么建议吗?如果之前已经回答了这个问题,即使将我引导到正确的地方,我也将不胜感激

4

0 回答 0