Java:Netbeans调试会话比正常运行更快

时间:2009-09-09 10:45:29

标签: java debugging netbeans

我在Netbeans 6.7.1中制作Braid

电脑规格:

Windows 7
Running processes: 46
Running threads: +/- 650
NVidia GeForce 9200M GS
Intel Core 2 Duo CPU P8400 @ 2.26Ghz


正常运行的游戏规范:

Memory: between 80 MB and 110 MB
CPU: between 9% and 20%
CPU when time rewinding: 90%

调试会话的值相同,除非我倒回时间:CPU:20%。

有什么理由吗?有没有办法在正常运行时达到相同的性能。

这是我重新粉刷的代码:

 @Override
 public void repaint()
 {
     BufferStrategy bs = getBufferStrategy(); // numBuffers: 4
     Graphics g = bs.getDrawGraphics();
     g.setColor(Color.BLACK);
     g.fillRect(-1, -1, 2000, 2000);
     gamePanel.paint(g.create(x, y, gameDim.width, gameDim.height));
     bs.show();
     g.dispose();
     Toolkit.getDefaultToolkit().sync();
     update(g);
 }

游戏全屏运行(未修饰+ frame.size =屏幕大小)

马亭

2 个答案:

答案 0 :(得分:2)

您使用哪个框架?或者你自己写了一个?在后一种情况下,您使用System.currentTimeMillis()或System.nanoTime()来限制FPS吗?

Debugmode可能会在Windows下更改操作系统中断速率的分辨率,从而也会更改System.currentTimeMillis()的分辨率。

我有一个类似的案例,在使用VisualVM时我的游戏运行得更快。使用System.nanoTime()而不是System.currentTimeMillis()来计算Thread.sleep()的值来修复它。

您可以在此处详细了解此主题: http://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks

答案 1 :(得分:1)

repaint()方法很便宜,因为在处理之前会合并多个请求。我会猜测,在调试器下,更多重新绘制正在合并到paint()的实际调用中。

尝试保留每次调用paint()paintComponent()时更新的计数器。如果我是对的,那么在调试器下运行时应该会看到更少的调用。