提高C#循环的效率

Wil*_*son 1 c# loops pi

我正在制作一个程序,通过将给定半径的多边形的边数增加到一个非常高的数字来估计pi,取出该区域,并将其除以半径的平方.我有以下内容:

            double radius = 5;

            for (double sides = 3;sides < 10000;sides++)
            {
                double pi_est = ((radius * radius * sides * Math.Sin((360 / sides)*(Math.PI/180))) / 2) / (radius * radius);
                richTextBox1.AppendText(pi_est+"\n");
            }
Run Code Online (Sandbox Code Playgroud)

截至目前,这需要大约5秒钟才能完成.有什么我可以写的,可以提高我的循环效率吗?

nne*_*neo 8

AppendText调用将花费大量时间,因为它意味着访问UI.使用a StringBuilder或数组String.Join来累积字符串.

你永远不应该使用a double作为迭代变量; 使用一个int代替(这不是一个效率问题和更多的潜在问题).

radius*radius取消 - 请注意,这pi与所使用的半径无关,因此您可以假设半径等于1并忽略它.

全部写出:

StringBuilder sb = new StringBuilder();

for(int sides = 3; sides < 10000; sides++) {
    double pi_est = sides * Math.Sin((2*Math.PI)/sides) / 2;
    sb.append(pi_est + "\n");
}
richTextBox1.AppendText(sb.ToString());
Run Code Online (Sandbox Code Playgroud)


Bro*_*ass 5

对于初学者,您可以预先计算循环外的半径*半径.

此外,如果不需要循环内更新您的丰富的文本框,一旦外循环,只是使用StringBuilder内.

  • 编译器应该弄清楚那一个. (2认同)