Thread: TimestampUtils.toString() speedup

TimestampUtils.toString() speedup

From
Alex Malone
Date:
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();
    }

Re: TimestampUtils.toString() speedup

From
Kris Jurka
Date:

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


Re: TimestampUtils.toString() speedup

From
Alex Malone
Date:
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