如何加快foreach的结果

时间:2018-02-20 18:13:52

标签: c# foreach

我正在制作Windows窗体应用程序,我想生成0到99999之间的数字。 我使用以下代码打印这些数字:

  private void button1_Click(object sender, EventArgs e)
    {
        int[] arr = Enumerable.Range(0, 99999).ToArray();
        var sb = new StringBuilder();
        foreach (int a in arr)
        {
            sb.AppendLine(a.ToString("000000"));
           // textBox3.Text += a.ToString("000000")+Environment.NewLine;
            textBox3.Text = sb.ToString();

        }
    }

但打印所有数字需要花费大量时间。

有没有办法加快速度?

4 个答案:

答案 0 :(得分:6)

您在每次迭代中设置TextBox的文字。因此文本框重绘了100000次。当然它很慢。

将文本的设置移到循环

foreach (int a in arr)
{
    sb.AppendLine(a.ToString("000000"));
}
textBox3.Text = sb.ToString();

因此,只有在完成字符串编写后才设置文本,文本框只重绘一次。

答案 1 :(得分:0)

可能是这个帮助

 private void button1_Click(object sender, EventArgs e)
    {
        int[] arr = Enumerable.Range(0, 99999).ToArray();
        var sb = new StringBuilder();
        foreach (int a in arr)
        {
            sb.AppendLine(a.ToString("000000"));
           // textBox3.Text += a.ToString("000000")+Environment.NewLine;

        }
         textBox3.Text = sb.ToString();
    }

答案 2 :(得分:0)

这种方法怎么样。

    private void button1_Click(object sender, EventArgs e)
    {
        textBox3.Text = string.Join(Environment.NewLine, Enumerable.Range(0,99999).Select(x => x.ToString().PadLeft(6, '0')));
    } 

答案 3 :(得分:-1)

你试过这个吗?

foreach (int a in arr)
{
    sb.AppendLine(a.ToString("000000"));
}
textBox3.Text = sb.ToString();