Привет, я использую следующий код для генерации CSV-файла с помощью сервлета Java, но он принимает 40 минут для создания CSV-файла без. из рядов 3000. есть ли какой-либо другой оптимизированный код, который может ускорить генерацию CSV до 1 или 2 минут. Мой код здесь:Генерация файлов CSV слишком медленная
protected void getCSVReportGererated(HttpServletRequest req, HttpServletResponse res) throws IOException{
ResultSet rs = null;
String reportSQL = getReportSQL();
PreparedStatement ps = null;
Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/testDb","username", "password");
try{
ps = conn.prepareStatement(reportSQL);
ps.execute();
rs = ps.getResultSet();
res.setContentType("text/csv");
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy-HHMM");
Date dt = new Date();
String reportName = "my_report"+sdf.format(dt)+".csv";
res.setHeader("Content-disposition", "attachment; " + "filename=" + reportName);
ArrayList<String> rows = new ArrayList<String>();
rows.add("col1,col2,col3,col4,col5,col6,col7,col8,col9,col10");
rows.add("\n");
String row = null;
while(rs.next()){
row = String.format("%04d", Integer.parseInt(rs.getString(1)))+","+String.format("%05d", Integer.parseInt(rs.getString(2)))+","+rs.getString(3)+","+rs.getString(4)+","+rs.getString(5)+","+rs.getString(6)+","+rs.getString(7)+","+rs.getString(8)+","+rs.getString(9)+","+rs.getString(10);
rows.add(row);
rows.add("\n");
}
Iterator<String> iter = rows.iterator();
while (iter.hasNext()){
String outputString = (String) iter.next();
res.getOutputStream().print(outputString);
}
res.getOutputStream().flush();
}catch(SQLException e){
e.printStackTrace();
}finally{
try {
if (ps != null)
ps.close();
if (conn != null)
conn.close();
if(rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Пытаться совместить обе а петли в одном. Может быть, evevn без использования «рядов» вообще. –
Сколько времени потрачено на получение результатов? Рассматривали ли вы пропуски для создания «ArrayList» и напрямую записываете в выходной поток? –
Filburt
Использование многопоточности –