何时在C#中声明有关效率/速度的变量

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等做的那样)

Eri*_*ips 5

我建议阅读编译器 - 每个程序员应该了解的编译器优化.因此,您尝试的微观优化很可能没有任何影响.编译器和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,因此没有区别.

因此,唯一的方法就是自己运行测试......那就是你绝对需要这种速度.

其他好文章:

微优化剧场的悲剧悲剧

硬件很便宜,程序员很贵