Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing性能OS X 10.6与Windows 7 这是我第一次到这个论坛,我大约有6个月的java经验,大约1个月的java GUI编程(Swing),所以把我当作java新手。_Java_Performance_Macos_Swing_User Interface - Fatal编程技术网

Java Swing性能OS X 10.6与Windows 7 这是我第一次到这个论坛,我大约有6个月的java经验,大约1个月的java GUI编程(Swing),所以把我当作java新手。

Java Swing性能OS X 10.6与Windows 7 这是我第一次到这个论坛,我大约有6个月的java经验,大约1个月的java GUI编程(Swing),所以把我当作java新手。,java,performance,macos,swing,user-interface,Java,Performance,Macos,Swing,User Interface,我开始开发一个简单的2D射击游戏,将Java swing作为一个爱好项目。我使用的是Java 1.6.0_65和Mac OS X 10.6.8、Macbook Pro 2.4 GHz Intel Core 2 Duo(2010年春季型号),显示卡为NVIDIA GeForce 320M 在我的绘制方法中,我使用SwingdrawRect()方法绘制了大约30-50个矩形,大小为32*32像素,很少有7*7像素,较小的矩形用fillRect填充。我从计时器回调中每秒调用paintComponent

我开始开发一个简单的2D射击游戏,将Java swing作为一个爱好项目。我使用的是Java 1.6.0_65和Mac OS X 10.6.8、Macbook Pro 2.4 GHz Intel Core 2 Duo(2010年春季型号),显示卡为NVIDIA GeForce 320M

在我的绘制方法中,我使用Swing
drawRect()
方法绘制了大约30-50个矩形,大小为32*32像素,很少有7*7像素,较小的矩形用
fillRect
填充。我从计时器回调中每秒调用
paintComponent()
方法50次

为了了解绘画的速度和速度,我添加了一些测量代码,记录
paintComponent()
方法的开始和结束时间,并使用System.nanoTime()方法计算平均持续时间

在OS X 10.6上,每个
paintComponent()
的平均执行时间似乎约为3000 usec

我还为Windows7个人电脑(索尼Vaio笔记本电脑、AMD双核2.xGHz和HP笔记本电脑、英特尔四核2.xGHz,现在不记得所有细节)运行了相同的代码。在Windows机器中,平均执行时间只有大约100秒,即大约快30倍

什么能解释如此巨大的差异?
System.nanoTime()
能否在Windows 7和OS X之间以不同的分辨率工作,或者在OS X中绘制是否真的那么慢

另一方面,我还测量了游戏引擎非GUI相关部分的平均执行时间(对象移动、碰撞检测等),两个系统上的平均执行时间都在50-100秒之间,因此可能
system.nanoTime()
是可靠的,而在OS X中绘制速度真的那么慢吗

编辑:我无法从xCode和Eclipse复制粘贴任何代码,我不断收到关于格式设置的投诉,但您可以查看我为说明此问题而编写的测试应用程序,网址:


这个测试应用程序在Mac上的性能也很慢,大约1400-1800 usec/paint操作。

我在Mac上的SWT也有同样的问题。另一个观察结果是,在Mac上,与Windows相反,即使没有双缓冲,也不会有任何闪烁。这可能表明性能不佳的根本原因是操作的安全性增加(它们可能会阻塞,直到垂直刷新,以避免闪烁)。

在MacOS X上,基于英特尔图形的内置视网膜显示器的渲染速度似乎很慢。这一点在本文中突出显示。它位于JDK 8补丁40(8u40)中

我在创建2D侧/垂直滚动游戏时也遇到了这个问题,我正在研究Mac上的渲染:

  • 约塞米蒂10.10.3
  • MacBookPro(视网膜2012年年中)
  • 处理器2.7Ghz Intel Core i7
  • Java(TM)SE运行时环境(构建1.6.0_65-b14-466.1-11M4716)
我通过标准的
JComponent#paintComponent(Graphics)
方法执行渲染,并使用我自己的滚动双缓冲方法,这样我就可以通过对显示设备的
Graphics#drawImage()
的一次调用,将准备图像所花费的时间与实际绘制图像所花费的时间区分开来

如果我使用MBP的内置显示器(Intel HD Graphics 4000)绘制图像1680x1500,则需要30ms才能完成


如果我随后切换到外部显示器(NVIDIA GeForce GT 650M),对于相同的代码和相同的图像大小,我得到的时间5ms

Mac SWT
控件
创建强制
SWT。双缓冲
打开,无论您指定什么。我发现创建SWT
GC
相当慢。