D'abord, utilisez le mappage de la mémoire sur le fichier. Ce sera beaucoup plus efficace que de le lire dans la RAM car au lieu de deux copies (une dans votre programme et une dans le cache de fichiers), il n'y a qu'une seule copie.
Si chaque chaîne a une longueur fixe, une recherche binaire est très simple car vous pouvez traiter la mémoire comme un tableau de tableaux de caractères. Si chaque chaîne est de longueur variable mais 0 terminée, vous pouvez utiliser une variante de recherche binaire où vous passez au milieu de la liste de chaînes, recherchez le 0 suivant, puis testez la chaîne suivante après cela. Puis sautez en avant ou en arrière à 1/4 ou 3/4 de la liste de cordes et répétez.
Si chaque chaîne est de longueur variable dans le style Pascal, avec un nombre d'octets au début, c'est plus délicat. Une recherche linéaire depuis le début n'est pas trop lente, pour des recherches peu fréquentes. Si vous recherchez des correspondances exactes, n'oubliez pas que vous pouvez passer la plupart des chaînes en vérifiant que les longueurs ne correspondent pas.
Si vous devez souvent effectuer une recherche dans la liste, la construction d'un tableau de pointeurs char dans la liste des chaînes rendra la recherche binaire encore plus facile. Si ce fichier est vraiment un fichier d'index pour les recherches rapides, il l'a probablement déjà quelque part, à moins que le concepteur ait eu l'intention de construire un tableau de pointeurs char lors du chargement du fichier.
J'avais rencontré une situation similaire. Chaîne classique utilisée recherchant le caractère par caractère (en supposant ASCII). Puisque vous avez déjà un fichier d'index, je ne pense pas que vous puissiez améliorer les performances. – blitzkriegz