0

私のプログラムは動作しますが、パフォーマンスの問題が発生していると思います。配列をループしている間、合計 CPU 使用量の最大 40% を消費しています。通常、私のプログラムは CPU 使用率の 5% 未満しか消費しません。100,000 行以上をループしているため、ReDim Preserve がこれを引き起こしていると思います。これが私のコードです。

    Dim sArray As String()
    Dim fStream As New System.IO.FileStream("messages.txt", IO.FileMode.Open)
    Dim sReader As New System.IO.StreamReader(fStream)
    Dim Index As Integer = 0
    Do While sReader.Peek >= 0
        ReDim Preserve sArray(Index)
        sArray(Index) = sReader.ReadLine
        Index += 1
    Loop

    fStream.Close()
    sReader.Close()

ReDim Preserve 以外に値を配列に配置する別の方法はありますか? 事前に感謝します。私は今、この問題に本当に閉じ込められています。

リストを使用して更新されたコードを次に示します。

    Dim sArray As String()
    Dim sList As New List(Of String)
    Dim fStream As New System.IO.FileStream("messages.txt", IO.FileMode.Open)
    Dim sReader As New System.IO.StreamReader(fStream)
    Dim Index As Integer = 0
    Do While sReader.Peek >= 0
        sList.Add(sReader.ReadLine)
    Loop
    sArray = sList.ToArray

    fStream.Close()
    sReader.Close()

私はまだ配列の機能が必要だったので、配列を作成し、リストの内容をそこに配置しました。

4

3 に答える 3

6

List(Of String)毎回サイズ変更するのではなく、将来の要素のための余地を残す を使用する必要があります。

于 2013-07-25T14:00:33.540 に答える
3

SLaksが言ったように、最善はリストであるべきです:

Dim sArray As New List(Of String)
Dim fStream As New System.IO.FileStream("messages.txt", IO.FileMode.Open)
Dim sReader As New System.IO.StreamReader(fStream)
Do While sReader.Peek >= 0
    sArray.add(sReader.ReadLine)
Loop

fStream.Close()
sReader.Close()
于 2013-07-25T14:28:22.630 に答える