【问题标题】:Why does my Java application run so slowly in full-screen mode? (and fine when windowed)为什么我的 Java 应用程序在全屏模式下运行如此缓慢? (窗口化时很好)
【发布时间】:2012-01-12 21:34:15
【问题描述】:

我正在开发一个旨在以全屏模式运行的 Java 程序。它使用大量定制的 Swing 组件和 Java2D 绘制的组件,这些组件需要每秒更新和重新绘制几次。它在我动力不足的工作 PC 上运行得相对较好。

但后来我在家里用功能更强大的 PC 进行了试用。它的运行速度明显变慢。触发一个本应立即更新大约 20 个不同屏幕元素的事件反而导致了一种效果,即每个元素似乎都需要至少四分之一秒才能重新绘制自己。因此,完成每个屏幕更改需要 5 秒钟,而不是瞬时更改。

我想可能是我尝试重绘过于频繁或以错误的方式重绘。但是在尝试了一些其他想法之后,我凭直觉让应用程序以窗口模式而不是全屏模式启动。有了这一变化,一切都开始变得非常快速和顺利。

所以我想这里真的有两个问题:为什么全屏模式会导致这个问题?为什么它只会在我更快的计算机上引起这个问题?我确实怀疑存在与操作系统相关的错误。我的慢速工作计算机是 Windows XP,而家用计算机是 Windows 7。我在其他线程中看到 Win7 上的 Aero 会导致 Java 速度问题,所以我尝试禁用它。这确实导致了速度的小幅提升,但仍然不如我在窗口模式下运行时那么流畅。有没有其他人在 Win7 上运行全屏 Java 应用程序时遇到性能问题?如果是这样,是否有解决方法?

【问题讨论】:

  • 对我来说听起来很熟悉...我觉得这是因为从正常窗口扩展状态(比如说从 640x480 到 1440x900)提高了全屏屏幕分辨率,我观察到越来越内存以适应全屏的 Swing 绘画作业。改回正常的窗口扩展状态就可以了。但是,它可以是特定于硬件的(有或没有专用 GPU 的系统)
  • @Mike O 你如何从代码本身中关闭direct3d?

标签: java performance fullscreen


【解决方案1】:

我找到了解决方案。我偶然发现了 Oracle 的 Java System 属性页面 (http://docs.oracle.com/javase/1.5.0/docs/guide/2d/flags.html),并认为那里可能有一些有用的东西。在使用 trace 命令时,我注意到有很多 Direct3D 引用。由于我的应用程序中没有任何东西是 3D 的,所以我觉得这很奇怪。所以我在我的 Java 命令行中添加了 -Dsun.java2d.d3d=false。正如页面所说,该选项将“关闭 Java 2D 系统对 Direct3D 的使用”。它就像一个魅力。现在它在我的 Windows 7 机器上以全屏模式完美运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2015-02-11
    相关资源
    最近更新 更多