我注意到
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++
发布于 2016-06-26 01:00:45
如何比较打印屏幕与计算的成本?
这是不可能的。打印的成本(即经过的时间)取决于“打印”字符的去向。我可以构造一个成本趋于无穷的例子。
$ java YourClass | ( sleep 10000000000 )输出几行之后,管道缓冲区将被填充,应用程序中的print调用将被阻塞。
是否有任何技巧,以尽量减少这一成本,我应该打印其中之一的记录,或这一成本同样多,因为有条件的检查?
没有什么不可能带来另一种开销;例如,测试是否打印的开销。
完全消除打印开销的唯一方法是在您试图度量性能时完全不打印。
我最好的方法是什么?把每个箱子打印出来?-太慢了。让它在一夜之间运行?如果我错过了一些i++怎么办?
首先,使用print语句运行程序,以检查您是否得到了正确的答案。
然后删除打印语句并再次运行以获得性能度量。
然而:
发布于 2016-06-26 00:57:35
是的印刷很贵。处理器可以在打印到终端/IDE所需的时间范围内执行数百万次操作。如果您使用的是eclipse或终端,那么它非常耗时。如果使用的是终端,则需要使用>>或>将其重定向到文件,或使用nio或io库将其写入文件。只在不可避免的情况下打印任何东西,否则我觉得如果性能是问题,你就不应该打印。
发布于 2016-06-26 01:06:38
下面是计算下一个素数和打印进程中测试的所有数字的最快方法(前提是下一个素数不会导致int溢出):
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);https://stackoverflow.com/questions/38034299
复制相似问题