我正在运行某种为提高效率而完全构建的东西。我对此主题还没有足够的经验,并且想知道何时最好地声明变量。我的代码的以下部分特别是:
//Variables not declared in the next part are declared here (like xx, y1, x1.....)
for(s = 0; s < this.Width; s++)
{
y = ymin;
for(z = 0; z < this.Height; z++)
{
x1 = 0;
y1 = 0;
looper = 0;
while(looper < curMaxIter && Math.Sqrt((x1 * x1) + (y1 * y1)) < 2)
{
looper++;
xx = (x1 * x1) - (y1 * y1) + x;
y1 = 2 * x1 * y1 + y;
x1 = xx;
}
double perc = looper / (double)curMaxIter;
int val = ((int)(perc * 255));
b.SetPixel(s,z,cs[val]);
y += intigralY;
}
x += intigralX;
}
大家都可以想象,这个while循环会持续一段时间……而且我想以任何方式减少所花费的时间,而结果将是相同的。整个代码的每一帧再次运行数千次(我为那些好奇的人渲染了Mandelbrot图像)。 我的主要问题:在使用变量之前,先声明变量(例如perc和val,还喜欢xx,y1和x1)会更快吗? (例如perc和val)还是最好在整个循环之前声明它们? (就像我对xx,y1和x1等所做的一样。)
答案 0 :(得分:5)
我建议阅读Compilers - What Every Programmer Should Know About Compiler Optimization。结果,您尝试进行的微优化最有可能的效果为零。编译器和JIT团队非常聪明。例如:
就优化功能而言,RyuJIT和Visual C ++有什么区别?由于RyuJIT可以在运行时完成工作,因此可以执行Visual C ++无法执行的优化。例如,在运行时,RyuJIT可能能够确定if语句的条件在应用程序的特定运行中永远不会为真,因此可以对其进行优化。
Performance example, which one is faster?:
List<User> list = new List<User>();
User u;
foreach (string s in l)
{
u = new User();
u.Name = s;
list.Add(u);
}
或者这个:
List<User> list = new List<User>();
foreach (string s in l)
{
User u = new User();
u.Name = s;
list.Add(u);
}
答案:
在性能方面,两个示例均编译为相同的IL,因此没有区别。
所以唯一可以告知的方法就是自己运行测试……也就是说,如果您绝对需要这种速度。
其他好文章:
答案 1 :(得分:-1)
您可以使用Visual Studio Performance Profiler https://msdn.microsoft.com/en-us/library/ms182372.aspx