VB.net ReDim Preserve的替代方式

时间:2013-07-25 13:59:40

标签: arrays vb.net loops filestream streamreader

我的程序确实有效,但我认为它会遇到性能问题,它在循环阵列时占用了总CPU使用率的40%。通常我的程序只占用CPU使用率的5%以下,我认为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()

我仍然需要数组的功能,所以我创建了一个数组并将List的内容放入其中。

3 个答案:

答案 0 :(得分:6)

您应该使用List(Of String),这将为将来的元素留出空间,而不是每次都调整大小。

答案 1 :(得分:3)

正如SLaks所说,最好应该是一个List:

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()

答案 2 :(得分:1)

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

Dim sArray() As String = System.IO.File.ReadAllLines("messages.txt")