Je travaille sur une application hautes performances où tous les appels doivent être justifiés. J'ai une carte qui est utilisée une fois au début de chaque transaction pour faire une recherche que je voudrais améliorer. La carte est chargée au démarrage et ne change pas après cela.Alternative à stdext :: hash_map pour des raisons de performance
La clé dans la carte ci-dessous est une chaîne std :: mais elle peut être changée en tableau de char si nécessaire. C ou C++ comme solution est bien.
typedef stdext::hash_map<std:string, int> symbols_t;
Est-ce que quelqu'un connaît d'autres solutions qui pourraient éliminer la recherche ou être plus rapide?
Merci d'avance pour votre aide.
Autres infos sur les modifications:
1. La hash_map contient actuellement 350 000 éléments.
2. Chaque valeur de clé a généralement une longueur comprise entre 4 et 10 caractères.
3. Des informations sont reçues sur un rappel d'une API tierce. Le rappel reçoit un symbole qui est utilisé comme valeur clé lors de la recherche de la carte. Le reste du logiciel est dérivé de l'int retourné à partir de la recherche de carte. MERCI: Merci à tous pour votre contribution. Vous m'avez donné quelques pistes à explorer. Je vais certainement essayer ces derniers. J'apprécie l'aide.
Je doute fortement que la performance globale sera radicalement différente si vous remplacez «std :: string» par «char *». Cependant, cela rendrait le code beaucoup moins facile à maintenir. – ereOn
Une table de hachage est O (1), donc le temps de recherche ne dépend que du temps nécessaire pour calculer le hachage. Avez-vous examiné cela? – sbi
Je me demande, est-ce le plus gros goulot d'étranglement dans votre code? Sent une optimisation prématurée. – ybungalobill