Thread: TimestampUtils.toString() speedup
Here is a small change that improved the performance of setting a timestamp field on a prepared statement from 0.513ms to 0.083ms in our tests. Measured using JProfiler for 50,000 iterations. Essentially it is switching to use SimpleDateFormat for toString(). I believe this code is from the 8.1 408 driver.
public static final SimpleDateFormat pgdtf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ GG");
private static final FieldPosition FIRSTPOS = new FieldPosition(0);
public synchronized String toString(Calendar cal, Timestamp x) {
if (cal == null)
cal = defaultCal;
cal.setTime(x);
sbuf.setLength(0);
if (x.getTime() == PGStatement.DATE_POSITIVE_INFINITY) {
sbuf.append("infinity");
} else if (x.getTime() == PGStatement.DATE_NEGATIVE_INFINITY) {
sbuf.append("-infinity");
} else {
pgdtf.format(cal.getTime(), sbuf, FIRSTPOS);
/*
appendDate(sbuf, cal);
sbuf.append(' ');
appendTime(sbuf, cal, x.getNanos());
appendTimeZone(sbuf, cal);
appendEra(sbuf, cal);
*/
}
showString("timestamp", cal, x, sbuf.toString());
return sbuf.toString();
}
public static final SimpleDateFormat pgdtf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ GG");
private static final FieldPosition FIRSTPOS = new FieldPosition(0);
public synchronized String toString(Calendar cal, Timestamp x) {
if (cal == null)
cal = defaultCal;
cal.setTime(x);
sbuf.setLength(0);
if (x.getTime() == PGStatement.DATE_POSITIVE_INFINITY) {
sbuf.append("infinity");
} else if (x.getTime() == PGStatement.DATE_NEGATIVE_INFINITY) {
sbuf.append("-infinity");
} else {
pgdtf.format(cal.getTime(), sbuf, FIRSTPOS);
/*
appendDate(sbuf, cal);
sbuf.append(' ');
appendTime(sbuf, cal, x.getNanos());
appendTimeZone(sbuf, cal);
appendEra(sbuf, cal);
*/
}
showString("timestamp", cal, x, sbuf.toString());
return sbuf.toString();
}
On Fri, 2 Mar 2007, Alex Malone wrote: > Here is a small change that improved the performance of setting a > timestamp field on a prepared statement from 0.513ms to 0.083ms in our > tests. Measured using JProfiler for 50,000 iterations. Essentially it > is switching to use SimpleDateFormat for toString(). I believe this > code is from the 8.1 408 driver. > > pgdtf.format(cal.getTime(), sbuf, FIRSTPOS); Doesn't this leave out the nanoseconds? The Calendar won't have anything below milliseconds. Kris Jurka
You have a point Kris. At least in our application, we have a different way of tracking hi-resolution time, and millisecond timestamps are fine.
For general use, an additional substitution with nanoseconds is needed.
--
Doesn't this leave out the nanoseconds? The Calendar won't have anything
below milliseconds.
Kris Jurka
For general use, an additional substitution with nanoseconds is needed.
--
Doesn't this leave out the nanoseconds? The Calendar won't have anything
below milliseconds.
Kris Jurka