gpt4 book ai didi

java - 使用 FreeMarker 流式传输巨大列表,内存不足异常

转载 作者:行者123 更新时间:2023-12-02 09:55:53 31 4
gpt4 key购买 nike

描述

有一个庞大的玩家数据库200.000,下面是.ftl模型:

<header> ... <header>
<main>
!Here is the problem
<#list items as vo>
<name> $vo.name} </name>
<surname> ${vo.surname} </surname>
<abilities> ${vo.abilities} </abilites>
</#list>
</main>
<footer> ... </footer>
<小时/>

怎么了?

当我的玩家数量较少时,上面的方法效果很好,比方说 5.000

我想做什么?

我需要立即为所有玩家创建此文档,这意味着我必须传递包含 100.000 或更多玩家的列表。这将导致 Java OutOfMemoryException

所以我每次都会获取1.000个玩家并创建列表,但问题是....如何像以前一样传递所有玩家?我有一个 .ftl 模型,而 FreeMarker 不支持类似的东西......

我希望所有 200.000 玩家都在同一个文档中。

我应该使用什么技术:)?

Java 类如下所示:

public FinalXMLVo extends HashMap<String,Object>{

...
private List<Player> players;

public FinalXMLVo(....,List<Player> players){

...
this.put("items",players);

}

...

}

最佳答案

您传递给 FreeMarker 的 Writer 是否缓冲所有输出?也许查看 OutOfMemoryException 通常发生的位置有助于弄清楚这一点。

除此之外,我不知道为什么较长的列表会在 FreeMarker 中消耗更多的内存。至少在您展示的这样一个基本用例中,它应该能够保持渲染,甚至是无限列表。

此外,如果您使用的是 Iterator 而不是 List,它也会释放数据源的内存(如 ResultSet 也许)足够聪明,不会缓冲所有内容。

关于java - 使用 FreeMarker 流式传输巨大列表,内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56017977/

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