Как сбросить XMLGregorianCalendar на новые значения - PullRequest
0 голосов
/ 22 августа 2011

Я собираюсь делать какую-то работу с датами миллионы раз в день. Я создал XMLGregorianCalendar для обработки дат из фида XML следующим образом:

XMLGregorianCalendar xCalEst = null;
xCalEst = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-08-09T21:50:00Z");

Где строка даты будет поступать из другого источника. Так как мне нужно много заниматься этим, я думаю, по соображениям производительности, я должен создать календарь как статический и просто создать его один раз. Проблема заключается в том, что нет (простого) способа сброса календаря с новой входящей строкой даты.

IE: я хотел бы иметь возможность что-то вроде: xCalEst.reset ("2011-08-09T21: 55: 00Z");

Я чрезмерно обеспокоен производительностью и просто позволяю объектам каждый раз создаваться и уничтожаться, или есть простой способ сделать это?

Обратите внимание, что я старый программист на Си и только начинаю с Java.

1 Ответ

0 голосов
/ 22 августа 2011

Я никогда не пробовал, но доступны такие методы, как setTime и setTimeZone. Этот подход будет работать, только если вы отправляете сообщения последовательно, например, в одной теме. Поскольку Java (в отличие от C) является объектно-ориентированным языком, его естественным поведением является создание и работа с объектами. Сначала вы должны доказать, что последовательное создание XMLGregorianCalendar является узким местом производительности / памяти, а затем попытаться оптимизировать. В общем, не стоит недооценивать мощь сборки мусора: -)

Учитывая ваш пример, вы должны сначала рассмотреть «кеширование» DataTypeFactory:

DatatypeFactory dtf = DatatypeFactory.newInstance();
dtf.newXMLGregorianCalendar("2011-08-09T21:50:00Z");
...