hei*_*kim 17 performance variable-assignment
考虑以下两种情况:
boolean b = false;
int i = 0;
while(i++ < 5) {
b = true;
}
Run Code Online (Sandbox Code Playgroud)
要么
boolean b = false;
int i = 0;
while(i++ < 5) {
if(!b) {
b = true;
}
}
Run Code Online (Sandbox Code Playgroud)
哪个更"昂贵"呢?如果答案取决于使用的语言/编译器,请提供.我的主要编程语言是Java.
请不要问我为什么要这样做的问题..它们只是指出相关的准系统示例:应该在循环中反复设置相同的值,还是应该在每个循环上测试它它拥有改变所需的价值?
And*_*ter 29
你似乎违反了规则2.你没有衡量标准.如果您真的想知道,您将通过设置针对方案B运行方案A并找到答案的测试来自己回答问题.不同环境之间存在很多差异,我们无法回答.
你测试过这个吗?在 Linux 系统上工作,我将第一个示例放在名为 LoopTestNoIf.java 的文件中,将第二个示例放在名为 LoopTestWithIf.java 的文件中,在每个示例周围包装一个主函数和类,进行编译,然后使用以下 bash 脚本运行:
#!/bin/bash
function run_test {
iter=0
while [ $iter -lt 100 ]
do
java $1
let iter=iter+1
done
}
time run_test LoopTestNoIf
time run_test LoopTestWithIf
Run Code Online (Sandbox Code Playgroud)
结果是:
real 0m10.358s
user 0m4.349s
sys 0m1.159s
real 0m10.339s
user 0m4.299s
sys 0m1.178s
Run Code Online (Sandbox Code Playgroud)
表明拥有 if 会使我的系统上的速度稍微快一些。
您是否试图找出在总运行时间上对每个循环进行分配是否比对每个循环进行检查并在满足测试条件时仅分配一次更快?
在上面的例子中,我猜测第一个更快。您执行 5 项任务。在后者中,您执行 5 项测试,然后执行一项作业。
但是您需要增加迭代次数并添加一些秒表计时器才能确定。
| 归档时间: |
|
| 查看次数: |
9089 次 |
| 最近记录: |