Je travaille en C# et je me suis un gros fichier texte (75MB) Je veux sauver les lignes qui correspondent à une expression régulièreComment obtenir certaines lignes d'un fichier texte dans C#?
J'ai essayé de lire le fichier avec un StreamReader et ReadToEnd, mais il faut 400Mo de RAM
et lors d'une nouvelle utilisation crée une exception de mémoire insuffisante.
J'ai ensuite essayé d'utiliser File.ReadAllLines():
string[] lines = File.ReadAllLines("file");
StringBuilder specialLines = new StringBuilder();
foreach (string line in lines)
if (match reg exp)
specialLines.append(line);
cela est grand mais quand ma fonction se termine la mémoire utilisée ne marche pas clair et je suis parti avec 300 Mo de mémoire utilisée, uniquement lors du rappel la fonction et l'exécution de la ligne: string [] lines = File.ReadAllLines ("file"); Je vois la mémoire passer à 50 Mo donner ou prendre, puis ré-attribuer à 200 Mo
Comment puis-je effacer cette mémoire ou obtenir les lignes dont j'ai besoin d'une manière différente?
De même, n'oubliez pas de disposer des objets 'FileStream' et' StreamReader'. –
Merci Matt. Oui, vous avez raison bien sûr. – eoldre
Vous n'avez pas besoin de créer le flux vous-même, le constructeur StreamReader peut prendre directement le nom du fichier. En outre, vous ne devez pas utiliser EndOfStream pour vérifier si vous êtes à la fin du fichier: étant donné que StreamReader met en mémoire tampon les données, la position du flux peut être à la fin avant que StreamReader ne renvoie toutes les lignes –