setCache()和CacheHint如何在JavaFX中协同工作?

时间:2013-09-20 07:28:16

标签: java caching javafx

关于JavaFX,我有以下问题:

  1. 我是否需要在Node上使用setCache(true)来为setCacheHint()设置的缓存提示实际产生任何效果?

  2. 调用setCache实际上提高性能,即帧速率在某些时间或大部分时间?当我使用setCache(true)并且我应用缩放和其他变换时,我无法观察到帧速率的任何变化。

1 个答案:

答案 0 :(得分:12)

  

我是否需要在Node上使用setCache(true)来为setCacheHint()设置的缓存提示实际产生任何影响?

cache属性提示系统是否应该缓存节点渲染(作为内部图像)。

cacheHint属性向系统提示节点上预期的变换,以便可以针对那些变换类型优化缓存操作(例如缓存提示旋转,缩放或速度等)

如果节点未设置为高速缓存,则cacheHint无关紧要。

  

调用setCache是​​否应该在某些时候或大部分时间内提高性能,即帧速率?

不一定。 JavaFX的默认帧速率上限为60fps,因此如果性能足够好,即使没有任何缓存提示也达不到帧速率,您将看不到任何明显的差异。这是许多基本动画和变换的情况。

即使帧速率没有提高,缓存提示也可能使每个变换的执行效率更高,从而减少CPU或GPU密集度(通常通过交易视觉质量)。

可能还有其他因素会对您的帧速率产生更大的影响。这些事情可能与可缓存项目的渲染速度无关(例如,在游戏循环期间在JavaFX应用程序线程上执行的长时间运行操作或不断变化的节点内容)。


我在我编写的小游戏中使用了setCache(true)setCacheHint(CacheHint.SPEED)的组合,其中包含多个同时动画节点,其中多个效果和半透明应用于节点。这些设置确实加快了速度(Mac OS X,Macbook Air 2012,Java FX 2.2)。


您可以手动获取节点树的snapshot并手动将节点树替换为快照Image,而不是依赖于渲染系统的提示。这种快照技术并不总是最好的方法,但如果提示在你的情况下效果不好,它确实会给你一个替代方案。