我有以下代码执行查询并将其直接写入字符串缓冲区,然后将其转储到CSV文件.我需要写大量的记录(最多一百万).这适用于一百万条记录,对于一个大约200mb的文件大约需要半小时!在我看来好像很多时间,不确定这是否是最好的.即使它包括使用其他jar/db连接工具,请向我推荐更好的方法.
....
eventNamePrepared = con.prepareStatement(gettingStats +
filterOptionsRowNum + filterOptions);
ResultSet rs = eventNamePrepared.executeQuery();
int i=0;
try{
......
FileWriter fstream = new FileWriter(realPath +
"performanceCollectorDumpAll.csv");
BufferedWriter out = new BufferedWriter(fstream);
StringBuffer partialCSV = new StringBuffer();
while (rs.next()) {
i++;
if (current_appl_id_col_display)
partialCSV.append(rs.getString("current_appl_id") + ",");
if (event_name_col_display)
partialCSV.append(rs.getString("event_name") + ",");
if (generic_method_name_col_display)
partialCSV.append(rs.getString("generic_method_name") + ",");
..... // 23 more columns to be copied same way to buffer
partialCSV.append(" \r\n");
// Writing to file after 10000 records to prevent partialCSV
// from going too big and consuming lots of memory
if (i % 10000 == 0){
out.append(partialCSV);
partialCSV = new StringBuffer();
}
}
con.close();
out.append(partialCSV);
out.close();
Run Code Online (Sandbox Code Playgroud)
谢谢,
谭
只是写BufferedWriter直接而不是构建StringBuffer.
另请注意,您应该使用StringBuilder而不是StringBuffer...... StringBuffer具有内部锁定,这通常是不必要的.
分析通常是了解为什么某些东西变慢的唯一确定方法.但是,在这个例子中,我会建议两件不为人知的事情: