我有一个switch语句一个while循环:添加System.out.println()会减慢执行速度(很多)?
while(true) {
switch(state) {
case LOADING :
//THIS IS THE IMPORTANT PART
//view loading screen (already set by default)
contentPane.repaint();
if(tick == 400000) {
//state = GameState.MENU;
System.out.println("Reached " + gameTick);
}
break;
case MENU :
//view menu
break;
//some other cases without content, left them out here
}
tick++;
if(tick < 400000) {
System.out.println(tick);
}
if(tick == Long.MAX_VALUE) {
tick = 0;
}
}
现在这个代码执行的很好,只是显示加载屏幕(上它具有移动的小圆点,只要它的重绘反复调用,所以我确切地知道当它停止),输出从1计数至400000及对打印张数
399998
399999
Reached 400000
(最后3行输出)
的应用程序进入全屏模式,而当我ALT + TAB出,柜台通常是有的在130K左右,我看到它移动到了400K。
但是,如果我删除if语句打印此号码:
if(tick < 400000) {
System.out.println(tick);
}
加载屏幕永远不会发生变化,而当我ALT + TAB出来,已经达到了400K。
另外好奇的是,加载屏幕有三个'外观变化',一个是100个调用paintComponent方法,一个是200个调用,另一个是300个调用,将计数器重置为0.所以基本上,每100个滴答它应该有一个外观变化。在第一种情况下,if语句具有较长的执行时间,但我看到了这些变化,但远远没有我期望的那么频繁。在第二种情况下,我根本没有看到它们(我可以想象它们会发生得太快)。
所以我的问题是,什么在执行时间造成了这么大的差异,什么导致了paintComponent方法似乎被调用的次数的差异,以及循环迭代的400.000倍?
所有的想法appreceated。
[This](http://stackoverflow.com/questions/4120528/repaint-in-a-loop)应该有所帮助。 – st0le