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

setCache()和CacheHint在JavaFX中如何协同工作?,java,caching,javafx,Java,Caching,Javafx,关于JavaFX,我有以下问题: 我是否需要在节点上使用setCache(true)来获得setCacheHint()设置的缓存提示,才能真正发挥作用 调用setCache是否应该在某些时间或大部分时间提高性能,即帧速率?当我使用setCache(true)并应用缩放和其他变换时,我无法观察到帧速率的任何变化 我是否需要在节点上使用setCache(true)来获得setCacheHint()设置的缓存提示,才能真正发挥作用 对 该属性提示系统是否应该缓存节点渲染(作为内部图像) 该属性向系统提

关于JavaFX,我有以下问题:

  • 我是否需要在节点上使用setCache(true)来获得setCacheHint()设置的缓存提示,才能真正发挥作用

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

  • 我是否需要在节点上使用setCache(true)来获得setCacheHint()设置的缓存提示,才能真正发挥作用

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

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

    如果根本没有将节点设置为缓存,则cacheHint是不相关的

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

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

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

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


    我在我编写的小游戏中使用了
    setCache(true)
    setCacheHint(CacheHint.SPEED)
    的组合,这些小游戏同时具有多个动画节点,并对节点应用了多种效果和半透明效果。这些设置确实大大加快了速度(MacOSX、MacBookAir 2012、JavaFX2.2)



    您也可以手动获取节点树的快照,并用快照图像手动替换节点树,而不是依赖于渲染系统的提示。这种快照技术并不总是最好的方法,但如果提示在您的情况下效果不好,它确实为您提供了另一种选择。

    谢谢-非常好的解释@jewelsea您知道父节点的缓存提示是否会影响该节点的子节点吗?(例如,一个
    父节点,包含大量动画
    循环
    子节点)缓存提示会影响父节点,而父节点包含子节点-因此缓存提示会影响子节点。它们只是提示,因此,如果您想确切地了解发生了什么,您可能需要检查JavaFX源代码或在调试器中逐步完成渲染过程的代码,这可能会变得复杂。