2009-12-01 5 views
18

J'utilise ResourceBundle et Locale pour rechercher des valeurs de propriété. Tout simplement, le code ressemble à ceci:Performance ResourceBundle Java

public static String getPropertyValue(Locale locale, String resourceName, String key) { 
    ResourceBundle resource = ResourceBundle.getBundle(resourceName, locale); 
    return resource.getString(key); 
    } 

Ma question concerne la performance. Une approche de mise en cache serait-elle plus rapide ou une meilleure implémentation que l'accès aux fichiers de propriétés sur le classpath? Ma compréhension est que la performance de ResourceBundle est très bonne en général.

Le fichier de propriétés (dans ce cas) est inférieur à 30 lignes (c'est-à-dire ~ 30 paires clé/valeur).

Je remets en question la performance puisque nous pourrions utiliser une approche similaire sur les pages à forte charge, et l'approche de recherche à la demande pourrait s'avérer coûteuse.

+0

Ne pas deviner, mesurer. Benchmarking cela ne devrait pas être trop difficile, et il supprime l'incertitude. – skaffman

+0

Il est préférable de mesurer * et * comprendre. Un bon benchmark n'est pas une garantie de bonnes performances dans toutes les situations, il est toujours préférable de comprendre ce qui se passe sous le capot. –

Répondre

22

Selon le Javadocs:

instances de faisceaux de ressources créées par les méthodes d'usine getBundle sont mises en cache par défaut, et les méthodes d'usine renvoient la même instance de regroupement de ressources à plusieurs reprises si elle a été mise en cache.

Ainsi, vous ne devriez pas avoir besoin de faire de la mise en cache par vous-même. Mais si vous avez besoin d'un contrôle plus fin du comportement de mise en cache, vous pouvez utiliser la surcharge getBundle(String, ResourceBundle.Control) et transmettre un Control personnalisé.

+0

Ack, je ne sais pas comment j'ai raté ça. Merci, mm. – Chocula

Questions connexes