gpt4 book ai didi

java - javaFx 中的内存使用情况

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:03:47 25 4
gpt4 key购买 nike

我创建了一个 ScrollPane 并且它有一个 StackPane 作为子级,大小为 2000 像素,现在我用 StackPane 填充这张图片的一些片段:

enter image description here

我使用此代码将所有图像添加到我的 stackPane

 ImageView grass = new ImageView(Url.GRASS);
double x = grass.getImage().getWidth();
double y = grass.getImage().getHeight();
for(int i=0 ; i < 2000/x ;i++){
for(int j = 0;j<2000/y;j++){
ImageView grassTemp = new ImageView(Url.GRASS);
myStackPane.getChildren().add(grassTemp);
grassTemp.setTranslateX(-2000/2+(x)*i);
grassTemp.setTranslateY(-2000/2+(y)*j);

grassTemp.setCache(true);
grassTemp.setCacheHint(CacheHint.SPEED);
}
}

现在我看到我的内存使用大约需要 50-60 MB(没有 setCachesetCacheHint)我使用这些功能以获得更好的性能

    myStackPane.setCache(true);
myStackPane.setCacheHint(CacheHint.SPEED);

所有图片

 grassTemp.setCache(true);
grassTemp.setCacheHint(CacheHint.SPEED);

但我看到它只减少了大约 4-6 MB 的内存使用量

现在,对于加载大量图像时获得更好的性能和更好的内存使用率,您有什么看法?提前致谢

注意:我想用这些图片为我的小游戏制作一张小 map

最佳答案

您所有的 ImageView 都是同一张图像。您无需加载新的图像数据,只需复制图像即可。

代替:

ImageView grassTemp = new ImageView(Url.GRASS)

做:

Image grassImage = new Image(Url.GRASS) // **outside the loops
. . .
ImageView grassTemp = new ImageView(grassImage) // **inside the loops.

您可能应该只使用标准的 Pane 或 Group 并在 ImageView 上设置布局值(或使用 GridPane),而不是使用带翻译的 StackPane。

此外,作为替代方案,您可以使用带有 repeat 的 CSS 背景来完成此任务。

关于java - javaFx 中的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24789098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com