首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >印刷成本的“拇指法则”

印刷成本的“拇指法则”
EN

Stack Overflow用户
提问于 2016-06-26 00:54:45
回答 7查看 809关注 0票数 8

我注意到

代码语言:javascript
复制
int i=10000000;
boolean isPrime= false;
      while(!isPrime){
           i++;
           System.out.println(item); //this kills performance
           isPrime = checkIfPrime(i);

     }
}

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

如何比较打印屏幕与计算的成本?是否有任何技巧,以尽量减少这一成本,我应该打印其中之一的记录,或这一成本同样多,因为有条件的检查?

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-06-26 01:00:45

如何比较打印屏幕与计算的成本?

这是不可能的。打印的成本(即经过的时间)取决于“打印”字符的去向。我可以构造一个成本趋于无穷的例子。

代码语言:javascript
复制
  $ java YourClass | ( sleep 10000000000 )

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

是否有任何技巧,以尽量减少这一成本,我应该打印其中之一的记录,或这一成本同样多,因为有条件的检查?

没有什么不可能带来另一种开销;例如,测试是否打印的开销。

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

我最好的方法是什么?把每个箱子打印出来?-太慢了。让它在一夜之间运行?如果我错过了一些i++怎么办?

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

然后删除打印语句并再次运行以获得性能度量。

然而:

  1. 在编写Java微基准测试时要注意各种陷阱。
  2. 在页面和跟踪打印页面中拖网不是检查程序中(可能的)错误的好方法。
票数 7
EN

Stack Overflow用户

发布于 2016-06-26 00:57:35

是的印刷很贵。处理器可以在打印到终端/IDE所需的时间范围内执行数百万次操作。如果您使用的是eclipse或终端,那么它非常耗时。如果使用的是终端,则需要使用>>>将其重定向到文件,或使用nioio库将其写入文件。只在不可避免的情况下打印任何东西,否则我觉得如果性能是问题,你就不应该打印。

票数 3
EN

Stack Overflow用户

发布于 2016-06-26 01:06:38

下面是计算下一个素数和打印进程中测试的所有数字的最快方法(前提是下一个素数不会导致int溢出):

代码语言:javascript
复制
int i = 10000000;
boolean isPrime = false;
while (!isPrime) {
    i++;
    // System.out.println(item); //this kills performance
    isPrime = checkIfPrime(i);
}
for (int j = 10000001; j <= i; j++) sysout(j);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38034299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档