gpt4 book ai didi

java - 打印成本的“经验法则”

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:11 25 4
gpt4 key购买 nike

我注意到了

int i=10000000;
boolean isPrime= false;
while(!isPrime){
i++;
System.out.println(item); //this kills performance
isPrime = checkIfPrime(i);

}
}

打印变量的当前值会降低性能。我想偶尔打印一次,但要保持这种操作的成本较低。

如何将打印到屏幕的成本与计算成本进行比较?是否有任何技巧可以最大限度地减少此成本 [我应该打印 10 条记录中的一条,还是由于条件检查,此成本会一样高]?


为什么我需要这个?好吧,我正在用 Java 做一些有趣的事情(比如“为欧拉的结合找到一个反例...... 27^5 + 84^5 + 110^5 + 133^5 = 144^5 (Lander & Parkin, 1966)” ).我想写一个既正确又快速的程序(这个反例是在60年代发现的,所以我应该可以在合理的时间内完成)。在调试时,我希望获得尽可能多的信息,并且我希望尽快找到反例。我最好的方法是什么?打印每个案例? - 太慢了。让它通宵运行?如果我错过了一些 i++ 怎么办?

最佳答案

How to compare the cost of printing to screen to computation?

这是不可能的。打印的成本(即耗时)取决于“打印”字符的去向。我可以简单地构建一个成本趋于无穷大的示例。

  $ java YourClass | ( sleep 10000000000 )

几行输出后,管道缓冲区将填满,应用程序中的 print 调用将阻塞。

Are there any tricks to minimize this cost [Should I print one out of 10 records, or will this cost just as much because of conditional check]?

没有什么不会引入额外的开销;例如测试是否打印的开销。

完全消除打印开销的唯一方法是在您尝试衡量性能时完全不打印


What is my best way to proceed? Print each case? - Too slow. Let it run overnight? What if I missed some i++?

首先使用 print 语句运行程序以检查您是否得到正确的答案。

然后删除打印语句并再次运行以获取性能指标。

但是:

  1. 当心编写 Java 微基准测试时的各种陷阱。
  2. 翻阅一页又一页的痕迹打印并不是检查程序中(可能的)错误的好方法。

关于java - 打印成本的“经验法则”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38034299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com