c# - 性能 : assign boolean value always or check value first?

标签 c# .net vb.net boolean

我确定它可以忽略不计,但考虑到我想从一个方法中将 true 分配给一个 boolean 字段,这个选择有什么不同吗?如果是,为什么?

field = true; // could already be true, but I don't care

对比

if(!field) field = true;

最佳答案

我会说不。但这确实取决于我们真正谈论的是一个字段,而不是一个属性,后者可能(尽管它绝对不应该) 在您包含的两个片段中表现出不同的行为(即,如果 setter/getter 中存在带有副作用的逻辑)。

更新:如果您谈论的是性能开销,那实际上没有区别——但是我相信赋值的开销要小得多(比阅读值(value))。这是一个示例程序来演示这一点:

bool b = false;

Stopwatch sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
    b = true;
}
sw.Stop();

TimeSpan setNoCheckTime = sw.Elapsed;

sw = Stopwatch.StartNew();
for (int i = 0; i < int.MaxValue; ++i)
{
    // This part will never assign, as b will always be true.
    if (!b)
    {
        b = true;
    }
}
sw.Stop();

TimeSpan checkSetTime = sw.Elapsed;

Console.WriteLine("Assignment: {0} ms", setNoCheckTime.TotalMilliseconds);
Console.WriteLine("Read: {0} ms", checkSetTime.TotalMilliseconds);

我机器上的输出:

Assignment: 2749.6285 ms
Read: 4543.0343 ms

关于c# - 性能 : assign boolean value always or check value first?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586795/

相关文章:

c# - 如何避免表单数据中的 url 编码

c# - 当用户移动窗口时 PushFrame 锁定 WPF 窗口

vb.net - 如何识别用户是否单击了 DateTimePicker 日历中的日期

c# - 页面加载的 PrincipalPermission

c# - 如何在 C# 中使用 Open XML SDK 将 doc 转换为 docx

vb.net - 创建一个不能从外部更改的 List 属性

c# - 在 C# .net 中如何使用 RSA 和许可证提供程序类进行许可?

C# 克隆既不实现 IClonable 也不实现 ISerializable 的对象

c# - 读取大量文件 "at the same time"

c# - 为什么 string.Substring 不与源字符串共享内存?