Mer*_*ijn -2 c# variables performance declaration cpu-speed
我正在运行一些完全为效率而构建的实现.我对这个主题还不是很有经验,并且想知道何时最好地声明变量.我的代码的以下部分特别是:
//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;
}
Run Code Online (Sandbox Code Playgroud)
正如你们所能想象的那样,这个while循环会持续一段时间......我希望以任何方式尽可能减少所需的时间,而结果将是相同的.这整段代码每帧再次运行数千次(我为那些好奇的人渲染Mandelbrot图像).我的主要问题是:在使用它们之前声明变量(如perc和val,还有xx,y1和x1)是否更快?(比如perc和val)或者更好地在整个循环之前声明它们?(就像我用xx,y1和x1等做的那样)
我建议阅读编译器 - 每个程序员应该了解的编译器优化.因此,您尝试的微观优化很可能没有任何影响.编译器和JIT团队非常聪明.例如:
RyuJIT和Visual C++在优化功能方面有什么区别?因为它在运行时运行,所以RyuJIT可以执行Visual C++无法实现的优化.例如,在运行时,RyuJIT可能能够确定if语句的条件在应用程序的此特定运行中永远不会为真,因此可以将其优化掉.
List<User> list = new List<User>();
User u;
foreach (string s in l)
{
u = new User();
u.Name = s;
list.Add(u);
}
Run Code Online (Sandbox Code Playgroud)
或者这一个:
List<User> list = new List<User>();
foreach (string s in l)
{
User u = new User();
u.Name = s;
list.Add(u);
}
Run Code Online (Sandbox Code Playgroud)
回答:
在性能方面,两个示例都编译为相同的IL,因此没有区别.
因此,唯一的方法就是自己运行测试......那就是你绝对需要这种速度.
其他好文章:
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |