Des Alternatives à SimpleDateFormat pour la date de l'analyse
J'aurais vraiment besoin d'une alternative à SimpleDateFormat, je suis de la conversion de nombreuses Strig dates(>100) de JST à l'heure GMT. Le problème que j'ai c'est que mon code génère de nombreux char[] , comme je l'ai remarqué tout de profilage. Pour 150k dates, je reçois constante de 150 MO de mémoire utilisée, et ce n'est pas vraiment une option. Merci.
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
sdf.setTimeZone(tz);
try {
Date theResult = sdf.parse(dateToConvert);
SimpleDateFormat rdf = new SimpleDateFormat(resultDateFormat);
rdf.setTimeZone(resultTz);
return rdf.format(theResult);
} catch (ParseException e) {
e.printStackTrace();
}
Je ne peux pas utiliser Joda time, de sorte que n'est pas une option pour moi. 🙁
Où est la boucle?
Envisager l'utilisation de JODA le temps, elle pourrait faire mieux.
Que faire si vous cache la SimpleDateFormats? Notez qu'ils ne sont pas thread-safe, vous aurez besoin d'un cache par thread.
La boucle appelle cette méthode. public static String parseDate(String dateFormat, Fuseau horaire tz, Chaîne dateToConvert, Chaîne resultDateFormat, Fuseau horaire resultTz). Aussi, je tiens à mentionner que les formats de date ne sont pas les mêmes, l'entrée est aaaa-MM-jj HH:mm:ss.SSS et la sortie est aaaammjj HH:mm:ss.SSS
Envisager l'utilisation de JODA le temps, elle pourrait faire mieux.
Que faire si vous cache la SimpleDateFormats? Notez qu'ils ne sont pas thread-safe, vous aurez besoin d'un cache par thread.
La boucle appelle cette méthode. public static String parseDate(String dateFormat, Fuseau horaire tz, Chaîne dateToConvert, Chaîne resultDateFormat, Fuseau horaire resultTz). Aussi, je tiens à mentionner que les formats de date ne sont pas les mêmes, l'entrée est aaaa-MM-jj HH:mm:ss.SSS et la sortie est aaaammjj HH:mm:ss.SSS
OriginalL'auteur CristiL | 2012-02-23
Vous devez vous connecter pour publier un commentaire.
Vous avez une raison particulière de supposer que
SimpleDateFormat
est inefficace à l'analyse des dates? À moins que vos dates ont une très caractéristique spécifique à eux qui se prête à une certaine optimisation, j'aurais pensé que le JDK classe va faire un raisonnable travail de celui-ci.Cela dit, sur l'hypothèse que vos dates ne sont pas tous distincts (peu probable avec 100k), vous pourriez chercher dans le cache - remplir une carte avec la
String
soit passé et leDate
à venir. Ce sera probablement réduire considérablement la quantité de l'analyse nécessaire; il peut ou peut ne pas aboutir à un notable de la vitesse de la mémoire et du gain en fonction des caractéristiques existantes.Que d'un côté, la création de deux nouveaux SimpleDateFormats chaque temps est susceptible d'être très inefficace. Pourquoi ne pas créer ces instances une fois, lorsque la classe est chargée (à moins que le changement de format par la ligne)? Cela pourrait résoudre votre problème en soi, si le fonctionnement interne des SDF sont telles qu'il implique beaucoup de
char[]
la répartition de son premier run. (Rappelez-vous que bizarrement les formats de date ne sont pas thread-safe, cependant, de sorte que vous voudrez peut-être unThreadLocal<DateFormat>
si votre analyse de classe est utilisé en même temps).OriginalL'auteur Andrzej Doyle
utilisation joda-time
OriginalL'auteur Ilya
Comme un point de départ, je voudrais réutiliser ces
SimpleDateFormat
instances plutôt que de la re-création de la paire d'entre eux pour chaque date que vous avez besoin de convertir.OriginalL'auteur NPE
Oui, joda time a vraiment une bonne API, mais user1143825 oublier de régler l'entrée de fuseau horaire.
Et je ne peux pas dire sur les performances de la mémoire, yout avoir à le tester et de comparer les résultats.
Cela devrait fonctionner:
OriginalL'auteur timaschew
à l'aide de java
À l'aide de joda Bibliothèque de conversion en temps
cette bibliothèque est amélioré mon code de la vitesse de la performance
l'aide de code java 14991 ms
à l'aide de joda bibliothèque 1668 ms
OriginalL'auteur rinkesh