gpt4 book ai didi

java apache poi 循环性能

转载 作者:行者123 更新时间:2023-12-01 11:00:18 24 4
gpt4 key购买 nike

我一直在使用处理大量数据的代码,该代码首先将整个长xlsx读取到arraylist的arraylist中,然后在方法worker中它逐行运行,每次满足条件时,它都会写入一些列并执行一些操作(每个工作程序方法可能为 1000 个),因此每个工作程序写入 1 行。 Worker 方法被实现了很多次,因此最终的 xlsx 将有 100000 行,全部有 1000 行(希望以后会更多。):

public static void main(String[] args) throws Throwable {
ArrayList<ArrayList> data; //filled by many thousands of rows from xlsx table in other part of code
SXSSFWorkbook workbook = new SXSSFWorkbook(100);
Sheet sheet = workbook.createSheet("sheet1");
FileOutputStream outputStream = new FileOutputStream("D:/output.xlsx");
int rowCount = 0;
Row row = sheet.createRow(0);

for (int i = 1, 1 < 100000, i++){
row = sheet.createRow(i);
worker(data,sheet,workbook,row)
}

workbook.write(outputStream);
outputStream.close();
workbook.dispose();

}

public static Row worker (ArrayList<ArrayList> data,Sheet sheet, SXSSFWorkbook workbook, Row row){

int columnCount = 0;

for (int i = 0; i < data.get(0).size(); i++) { //loop line by line through whole table
if (data.get(1).get(i) meets some condition){
Cell cell = row.createCell(++columnCount);
cell.setCellValue("column number" + columnCount );
do some other stuff;
}
}
return row;
}

这种计算的瓶颈是什么?它在我的性能更高的电脑上运行得比NB快得多,但我也尝试在8核28GB RAM Xeon服务器(win s 2012)上运行它,其中一切都没有得到充分利用,但我的家没有太多(如果有的话)改进个人电脑。怎样才能让这个小程序运行得更快呢?使用 db 而不是 arraylist 的 arraylist 吗?让它以某种方式并行计算? - 此处的任何指针表示哪个部分与哪个部分平行。没有其他想法,因为我是业余爱好者,即时学习 notaprogramer:/

感谢您的任何意见。

最佳答案

由于您没有使用多线程,因此仅使用 CPU 的一个核心。因此,多核或更多内存并没有多大改善,只有裸露的 CPU 速度很重要,而且这两个系统之间似乎具有可比性。

您可以尝试使这项工作并行进行,但请注意 POI 本身并不保证线程安全,因此您在这里有点如履薄冰。您也许可以预先创建所有行,然后并行填充单元格。

另一种选择是尝试使用类似 streaming XLSX reader 的内容。在读取文件时处理该文件,但随后您会将数据写入一个新文件(也许使用 SXSSFWorkbook 也不会消耗所有内存),因为就地写入是不可能的。

关于java apache poi 循环性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394584/

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