Question

J'essaie de créer un moyen d'obtenir la clé d'un texte donné dans un fichier .resx donné à l'exécution.

Actuellement, je peux ouvrir et lire le fichier (Utiliser ResXResourceReader), mais je dois utiliser un foreach pour parcourir l'intégralité du fichier.

Cela pourrait être un problème de performances, car certains de nos where fichiers sont assez volumineux (de l'ordre de 2000 chaînes) et que cela se produit fréquemment.

J'aimerais utiliser LINQ to Objects pour interroger ceci, car je suppose que la méthode AsQueryable() est relativement optimisée, mais je n'ai pas pu le faire. La classe GetEnumerator() a deux méthodes from n in reader.AsQueryable() where et <=>, mais n'autorise pas LINQ contre leur résultat (donc <=> échoue).

Comment puis-je LINQ contre quelque chose fourni par <=>, ou vaut-il même la peine?

Était-ce utile?

La solution

Le code suivant renvoie un objet IEnumerable qui vous permet d'utiliser LINQ pour interroger le contenu d'un fichier de ressources:

ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();

Autres conseils

Avez-vous envisagé de procéder à un prétraitement?

Vous pouvez charger le fichier Resx, puis passer en boucle sur les paires clé-valeur, puis les stocker inversées dans une table de hachage (la clé de la table de hachage est en réalité la valeur de la ressource et la valeur dans la table de hachage est la clé de la ressource). Ensuite, les traductions de valeur - & Gt; key seraient rapides. La seule préoccupation concerne la manière dont vous gérez les doublons (plusieurs ressources avec la même valeur).

Cela ne vaut pas vraiment votre temps. LINQ n'a aucun moyen de rechercher votre fichier .resx plus efficacement que vous ne le pourriez. En fonction de l'utilisation de la mémoire et de la pertinence de la mise en cache des données, il serait probablement préférable de lire l'intégralité du fichier dans un fichier Dictionary<TKey,TValue> et de procéder de cette façon à votre recherche.

Vous pouvez, bien sûr, créer votre propre objet multiplet pour stocker une paire clé / valeur et lire le fichier entier dans une liste, puis autoriser LINQ aux objets à effectuer votre interrogation, mais ce ne sera pas rapide comme Dictionary et nécessiterait davantage de temps système.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top