StringBuffer.append()vs ArrayList <string> .add()

时间:2017-08-04 13:38:03

标签: java list arraylist thymeleaf

在性能和内存方面,这将是最有效的吗?

现在,我有一个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元素)。还是会占用更多的记忆?

我对理解数据结构的空间复杂性相对较新;因此查询。

1 个答案:

答案 0 :(得分:1)

除了奇怪之外;)渲染一个包含200k记录的HTML表格,这个形式的问题最常见的答案......

  

在性能和内存方面,这将是最有效的吗?

...是:测量它!

您建议的方法(将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使用情况客户端

我怀疑实施建议的更改可能非常简单,当然可以轻松收集一阶测量结果。因此,不要试图评估第一原则的影响,而只是去做,看看它是否对你有所帮助。