预计算,经过实验发现,表达式的写法影响了C# 的预计算功能,比如,i=j*(2d/3d)编译器就可以对其进行优化,编译的时候,编译器会先求出2d/3d的值,然后把结果0.66…编译到目标代码中,所以实际编译的代码等价于i=j*0.66…;而如果是 i=j*2d/3d ,编译器不会对其进行优化,所以,虽然两式运算结果完全相同,但是运算速度却是大相径庭;
如果充分的利用预计算功能,可以极大的提高代码执行速度,比如,角度转弧度的运算,是把角度先乘以圆周率然后除以180。通常按照自然习惯,会这样写 j = k * Math.PI / 180.0;
上式的写法显然没有利用到C#的预计算功能,而如果改成下式:j = k * (Math.PI / 180.0);
就会发现,性能提高非常明显,大约快了70%;
using System;
namespace speed
{
class Program
{
static void Main(string[] args)
{
int i;
double k = 243d, j;
DateTime dt = DateTime.Now;
for (i = 0; i < 1000000000; i++)
{
j = k * Math.PI / 180.0;
}
TimeSpan ts = DateTime.Now - dt;
Console.WriteLine("no() cost time {0}", ts.ToString());
dt = DateTime.Now;
for (i = 0; i < 1000000000; i++)
{
j = k * (Math.PI / 180.0);
}
ts = DateTime.Now - dt;
Console.WriteLine("() cost time {0}", ts.ToString());
Console.Read();
}
}
}
no() cost time 00:00:16.1999265