加快代码生成动物名称列表

时间:2014-01-08 23:13:59

标签: vb.net

我在animals.txt中有大约5个动物名称,当我运行代码时一切正常并且速度很快..当我将800个动物名称放在文本文件中时,每行一行都需要...超过1小时到完成..我怎样才能加快这个过程?

Private Sub GenerateList()
    Dim animalsList As List(Of String) = IO.File.ReadLines("C:\animals.txt").ToList()

    Dim query = From firstWord In animalsList From secondWord In animalsList Where firstWord <> secondWord Select String.Format("{0}_{1}", firstWord, secondWord)

    Dim allKeys As String = ""
    For Each item In query
        allKeys += item & vbCrLf
        Label2.Text += 1
        Application.DoEvents()
    Next

    RichTextBox1.Text = allKeys
End Sub

1 个答案:

答案 0 :(得分:2)

使allKeys成为StringBuilder。然后在循环中执行allKeys.AppendLine(item)。最后,设置

RichTextBox1.Text = allKeys.ToString()

编辑:对于过多的DoEvents,它也可能是一个问题,但不太可能造成这么多的减速。为了证明这一点,我把这段代码放在一个空的WinForms应用程序中的Form_Load事件中 - 在~0.25秒内运行:

Dim sw As New Stopwatch
sw.Start()
For i = 1 To 800000
  Application.DoEvents()
Next
sw.Stop()
MessageBox.Show(sw.ElapsedMilliseconds.ToString)

将上述内容放入Button click处理程序不会改变结果,因此如果实际上没有发生任何事情,这些虚拟调用非常快。

另一个兴趣点是LINQ查询。我会重写它以使用字典或散列集来确保它尽可能快。但是,在StringBuilder旁边执行任何操作之前,请使用profiler查看导致速度减慢的原因。