for-loop/switch-statement的性能优化

vai*_*hav 6 c# logic for-loop switch-statement

请帮我确定以下哪些是更优化的代码?

for(int i=0;i<count;i++)
{
    switch(way)
    {
        case 1:
            doWork1(i);
            break;
        case 2:
            doWork2(i);
            break;
        case 3:
            doWork3(i);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

switch(way)
{
    case 1:
        for(int i=0;i<count;i++)
        {
            doWork1(i);
        }
        break;
    case 2:
        for(int i=0;i<count;i++)
        {
            doWork2(i);
        }
        break;
    case 3:
        for(int i=0;i<count;i++)
        {
            doWork3(i);
        }
        break;
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,总是在每次迭代中始终检查开关情况条件的开销.在第二种情况下,开销不存在.我觉得第二种情况要好得多.如果有人有任何其他解决方法,请帮我建议.

Mar*_*ell 5

switch低,连续值是出奇的快-这种类型的跳跃已经高度优化处理.坦率地说,你问将没有任何区别在绝大多数情况下- 任何doWork2(i);将要淹没这个; 哎呀,虚拟电话本身可能会淹没它.

如果真的,真的,真的很重要(我很难想到这里真实的情况),那么:衡量它.在任何明显的情况下,只有测量它的方法才是实际的,精确的代码 - 你不能概括微微优化.

所以:

  1. 没关系
  2. 测量
  3. 没关系