C# bool 比较与设置性能

标签 c# performance

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

另外,即使一个比另一个稍微快一点,循环中迭代次数如此之多以至于对性能的影响不可忽略是否可行?

最佳答案

消磨几分钟:

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

所以,除非遗漏了什么,否则只设置值比检查然后设置它更快。那是你想测试的吗?

编辑:

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

关于C# bool 比较与设置性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23570198/

相关文章:

sql - mysql中使用索引进行整数比较

php - 打开/关闭标签和性能?

c# - 在 .NET 4.0 基于代码的配置中使用 SQLite 的 EF6 : "Unable to Determine the DbProviderFactory"

android - android中的图像按钮加载时间慢

c# - ArgumentOutOfRangeException 构造函数(字符串)定义

c# - 强制将 excel 窗口带到前面?

c# - 数组算法中从当前数中找出最大的正确数

java - 游戏编程性能

c# - 微软服务总线中的主题路径是什么?

c# - 从枚举填充 ComboBox