0

我的程序确实可以工作,但我认为它存在性能问题,它在循环阵列时消耗了我总 CPU 使用率的 40%。通常我的程序只会消耗不到 5% 的 CPU 使用率,我认为 ReDim Preserve 导致了这种情况,因为我循环了大约 100,000 多行。这是我的代码。

    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 之外,还有其他方法可以将值放入数组中吗?在此先感谢,我现在真的陷入了这个问题。

这是我使用 List 更新的代码。

    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

您应该使用 a 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 回答
1

似乎您正在读取文件,另一种选择是使用ReadAllLines方法。

Dim sArray() As String = System.IO.File.ReadAllLines("messages.txt")
于 2013-07-25T18:43:19.647 回答