Lecture avancée de fichiers avec LINQ
Supposons que nous ayons deux fichiers texte, où chaque ligne représente un élément distinct à traiter. Notre objectif est d'explorer des méthodes efficaces et lisibles pour lire ces fichiers ligne par ligne en utilisant C#.
Approches actuelles
Actuellement, nous utilisons un StreamReader pour lire chaque ligne individuellement. . Bien que cette méthode soit simple, elle peut devenir inefficace pour les fichiers plus volumineux ou lorsque des lignes spécifiques doivent être sélectionnées.
Exploiter LINQ
LINQ fournit une approche puissante pour résoudre ce problème. problème :
static IEnumerable<SomeType> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { SomeType newRecord = /* parse line */ yield return newRecord; } } }
Cette méthode utilise un bloc itérateur pour implémenter un lecteur de ligne paresseux. En utilisant le mot clé rendement, il renvoie un enregistrement à la fois sans mettre en mémoire tampon l'intégralité du fichier.
Flexibilité améliorée
Pour résoudre le problème de consommation de mémoire, nous pouvons modifier le code légèrement :
static IEnumerable<string> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { yield return line; } } }
Maintenant, cette méthode renvoie une séquence de chaînes sans mise en mémoire tampon. Nous pouvons ensuite utiliser des opérateurs LINQ comme Where et Select pour filtrer et traiter les lignes selon les besoins.
... var typedSequence = from line in ReadFrom(path) let record = ParseLine(line) where record.Active // for example select record.Key;
Ce code utilise la méthode ReadFrom pour créer une séquence évaluée paresseusement, nous permettant d'effectuer des opérations complexes sans tenir le fichier entier en mémoire.
Conclusion
En utilisant LINQ, nous pouvons améliorer considérablement l'efficacité et la lisibilité de notre code de lecture de fichier. L'approche d'évaluation paresseuse évite une consommation inutile de mémoire, ce qui la rend idéale pour traiter des fichiers volumineux ou sélectionner des lignes spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!