【问题标题】:VB.net Alternative way of ReDim PreserveVB.net ReDim Preserve 的替代方式
【发布时间】:2013-07-25 13:59:40
【问题描述】:

我的程序确实可以工作,但我认为它存在性能问题,它在循环阵列时消耗了我总 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()

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

【问题讨论】:

  • 在其中一个答案中建议您使用列表,我同意。如果由于某种原因您不能这样做,请告诉我们。
  • 我在使用 List 进行转换时遇到问题。起始代码可能会有所帮助
  • 有理由不使用File.ReadAllLines吗?

标签: arrays vb.net loops filestream streamreader


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常感谢这帮助了很多人。我将在上面发布编辑我的代码并使用更新的代码。
    • 您需要数组的哪些功能?顺便提一句。你也应该接受 SLaks 的回答;)
    • 现在一切都完成了,我终于完成了。它确实提高了性能,我的程序现在可以在一秒钟内读取 100,000 多行。非常感谢。
    • 如果您正在阅读很多行,也可以尝试替换流测试的结尾。这是一个替代方案msdn.microsoft.com/en-us/library/db5x7c0d(v=vs.80).aspx 您可能会多挤出几毫秒的时间。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-16
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多