就性能和内存而言,哪个最有效?
现在,我有一个 List<ArrayList<String>>
它保存了近 200,000 条记录,由单独的业务逻辑生成。我正在尝试使用 Thymeleaf 在 HTML 页面中以表格格式打印它。
目前,我正在使用嵌套 th:each
循环使用 th:text
打印数据。正如预期的那样,这需要很长时间。
我调查了this发现th:utext
可用于在 Thymeleaf 中打印 html 内容。
我的业务逻辑生成这 200,000 条记录,当前给出 List<ArrayList<String>>
对象,但我可以将其修改为 List<String>
通过更改来对象。
但是,我的问题是,这会提高内存效率吗?它很有可能会提高性能效率,但我主要关心的是内存效率。会List<ArrayList<String>>
占用与 List<String>
相同的内存量包含相同的数据? (通过相同的数据,我的意思是,内容是相同的 - 而不是 ArrayList<String>
,它将包含一个字符串,中间有 HTML 元素)。还是会占用更多内存?
我对数据结构的空间复杂性的理解相对较新;因此提出查询。
最佳答案
撇开渲染具有 20 万条记录的 HTML 表的奇怪之处不谈,这是这种形式问题的最常见答案......
In terms of performance and memory, which would be the most efficient?
...是:测量它!
您建议的方法(将 List<ArrayList<String>>
替换为 List<String>
)意味着您希望实现以下目的:
List<String>
比List<ArrayList<String>>
占用空间更小- Thymeleaf 在处理
List<String>
方面要做的工作较少 - 使用
List<String>
获得的任何好处不会被转动List<ArrayList<String>> ... generated by a separate business logic
的额外成本所抵消进入List<String>
在服务器端
我认为您确定这一点的唯一方法是比较两种方法产生的一些指标。例如:
一阶测量:
- 测量创建响应服务器端所需的时间
- 测量在浏览器中呈现响应所需的时间
二阶测量:
- 在创建和发出响应时测量服务器端的内存和 CPU 使用情况
- 在渲染响应时测量客户端的内存和 CPU 使用情况
我怀疑实现建议的更改可能非常简单,并且当然可以轻松收集一阶测量结果。因此,与其尝试根据第一原则评估影响,不如直接去做,看看它是否对您有帮助。
关于java - StringBuffer.append() 与 ArrayList<String>.add(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508342/