C#布尔比较与设置性能

时间:2014-05-09 17:00:37

标签: c# performance

在C#中,假设我有一个foreach循环,迭代器可能是空的。循环之后,只有在迭代器不为空时才需要采取更多操作。所以我在循环之前声明bool res = false;。在每次循环迭代中设置res = true;或测试它是否已经完成更快,如if (!res) res = true;中所述。我想这个问题可以更简洁地表述为“设置bool的价值或测试其值是否更快?”

此外,即使一个比另一个稍快,在循环中进行如此多的迭代是否可行对性能的影响不可忽略?

2 个答案:

答案 0 :(得分:4)

杀了几分钟:

static void Main(string[] args)
    {
        bool test = false;

        Stopwatch sw = new Stopwatch();
        sw.Start();

        for (long i = 0; i < 100000000; i++)
        {
            if (!test)
                test = true;
        }

        sw.Stop();


        Console.WriteLine(sw.ElapsedMilliseconds + ". Hi, I'm just using test  somehow:" + test);
        sw.Reset();
        bool test2 = false;
        sw.Start();

        for (long i = 0; i < 100000000; i++)
        {
                test2 = true;
        }

        sw.Stop();

        Console.WriteLine(sw.ElapsedMilliseconds + ". Hi, I'm just using test2 somehow:" + test2);
        Console.ReadKey();
    }

输出:
448个
379

所以,除非错过了某些东西,否则设置值比检查然后设置它更快。这是你想要测试的吗?

编辑:

修正了评论中指出的错误。作为旁注,我确实运行了几次这个测试,即使在毫秒变化时,第二种情况总是稍微快一点。

答案 1 :(得分:2)

if (!res) res = true是多余的。

编译器应该足够聪明,知道res总是最终为真并删除if语句和/或如果使用Release / Optimize Code进行编译,则完全删除该集合。< / p>


问你自己的问题。设置原始值比实际比较和设置要快。我非常怀疑你能够准确地测量原语上的时差,只是在考虑这个时间比x exagerrated迭代中的过程耗费更多的时间。