在设置之前比较布尔值

Pet*_*ron 8 c# comparison boolean

在C#中,布尔变量的值设置为当false 只有当它是true,我应该检查它是否true设置之前,或刚成立的呢?

假设变量是true50%的时间,检查它是有意义的,因为比较更快.如果变量true大部分时间,我应该跳过比较吗?

哪种更好的做法?

方法1,先检查:

if (bVariable)
    bVariable = false;
Run Code Online (Sandbox Code Playgroud)

方法2,只需设置它:

bVariable = false;
Run Code Online (Sandbox Code Playgroud)

在哪种情况下方法2是首选,如果有的话?

Dav*_*kle 8

是什么让你认为比较更快?如果您编写的代码是在C编译器中完成的,则IF语句将被拆分为至少两条指令 - 比较/分支指令和单个字上单个位的"set"指令.

"set"将编译为单个指令.您的"优化"可能会使您的程序运行速度变慢,并且会导致程序的可读性降低.只需设置变量,不要试图过度思考小事.

CPU与数据库不同.您不需要为数据修改支付高额罚款. 您为前往主记忆和分支(如果陈述)支付高额罚款.分支的性价比是因为在分支指令做出决定之前,流水线 CPU实际上在分支之后开始执行指令!(我知道,这种说法有点令人兴奋).但这意味着CPU必须花费资源" 猜测 "您的IF语句的结果将是什么.如果猜错,它必须"扔掉"的,它猜中所有指令的结果将分支后执行,然后再试一次.这不好.这就是分支机构昂贵的原因.

这个特定故事的寓意并不是你永远不应该优化,而是你不应该在没有完全理解优化的含义的情况下进行优化.在这种情况下,如果您使用选项1,您可能最终得到一个较慢的应用程序,其启动可读性较差.

实际上,如果你对这类事情真的很感兴趣,你一定要拿一份Code Complete.它充满了关于这类事情的讨论,而且写得非常出色.