Lire efficacement des fichiers texte de taille moyenne et grande en C# : technologie d'optimisation de flux
Lorsque vous travaillez avec des fichiers texte volumineux, le chargement du fichier dans l'application peut devenir un goulot d'étranglement en termes de performances. Cet article explique comment tirer parti du streaming et de diverses techniques d'optimisation pour rendre ce processus plus efficace.
Stratégie d'optimisation :
1. StreamReader et mise en mémoire tampon :
L'utilisation d'un StreamReader avec un wrapper BufferedStream peut considérablement accélérer les opérations de lecture. Dans l'exemple de code suivant, BufferedStream est utilisé comme intermédiaire entre FileStream et StreamReader :
<code class="language-csharp">using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (BufferedStream bs = new BufferedStream(fs)) using (StreamReader sr = new StreamReader(bs)) { string line; while ((line = sr.ReadLine()) != null) { //在此处处理行 } }</code>
Cette approche réduit le nombre d'appels au système d'exploitation car les données sont mises en cache dans un tampon.
2. Modèle producteur/consommateur utilisant TPL Dataflow :
Pour les fichiers extrêmement volumineux, les performances peuvent être encore améliorées à l’aide du modèle producteur/consommateur de TPL Dataflow. Dans ce mode, un thread distinct est utilisé pour lire les lignes de texte, tandis qu'un autre thread est utilisé pour traiter les lignes. En tirant parti du parallélisme, cette approche peut améliorer considérablement l’évolutivité.
3. Initialisez StringBuilder en utilisant la longueur du flux :
Si la longueur du flux est connue, StringBuilder peut être initialisé avec une capacité appropriée pour éviter les opérations de redimensionnement lors de l'ajout. Cela économise l'allocation de mémoire et améliore les performances.
Autres notes :
En mettant en œuvre ces techniques d'optimisation, vous pouvez améliorer considérablement les performances de votre application lors du traitement de fichiers texte volumineux.
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!