patternjavaMinor
Speeding Up BufferedWriter
Viewed 0 times
speedingbufferedwriterstackoverflow
Problem
Are there any possible speed improvements I can make to the following method. It takes a JDBC ResultSet and breaks it into several CSV files:
public static void convertToCSV(final ResultSet rs) throws SQLException, IOException {
final DateFormat format = new SimpleDateFormat("yyyyMMdd,HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
final StringBuilder sb = new StringBuilder();
while (rs.next()) {
final File file = new File(sb.append(rs.getString("FIELD1")).append(".csv").toString());
if (!file.exists()) {
file.createNewFile();
}
final BufferedWriter fw = new BufferedWriter(new FileWriter(file.getAbsoluteFile(), true));
fw.write(rs.getString("FIELD2"));
fw.write(',');
fw.write(rs.getString("FIELD3"));
fw.write(',');
final String clobValue = rs.getString("FIELD4");
if(clobValue==null)
fw.write("null,");
else{
fw.write('\"');
fw.write(clobValue);
fw.write("\",");
}
final Date date = new Date(rs.getLong("FIELD5"));
fw.write(format.format(date));
fw.write('\n');
fw.close();
sb.setLength(0);
}
rs.close();
}Solution
You may see a performance increase by adding multithreading support. For each row, create an instance of a custom
Your use of the
Runable that takes the five values and add it to a ThreadPoolExecutor. You can futz around with the size of the pool. As with all performance enhancements, you'll need to test, test, test to make sure you're seeing a real benefit, and you'll really need to test on a production clone for it to have any meaning. It may not make a difference on your local machine but be a big help on production, or vice versa.Your use of the
StringBuilder as opposed to just concatenation is probably not doing you any good. Compilers will do that work, and the code is harder to read as-is. There are other things to pick at, but none of them are performance-related.Context
StackExchange Code Review Q#108176, answer score: 2
Revisions (0)
No revisions yet.