Quelle est la façon la plus rapide de lire un fichier texte dans une variable chaîne?
Je comprends que cela peut être fait de plusieurs façons, telles que la lecture d'octets individuels, puis la conversion en chaîne. Je cherchais une méthode avec un codage minimal.
Réponses:
Que diriez-vous
File.ReadAllText
:la source
StreamReader.ReadToEnd
est plus efficace.StreamReader.ReadToEnd
c'est plus efficace queReadAllLines
. Ce qui est normal, car ce dernier divise également le texte en lignes. Mais nous parlons d'une autre méthode,ReadAllText
. En effet, la réponse que vous mentionnez montre que celaReadAllText
ne fait qu'appeler enStreamReader.ReadToEnd
interne.Une comparaison de référence de
File.ReadAllLines
vs àStreamReader ReadLine
partir de la gestion des fichiers C #Approche StreamReader
Comme l'
File.ReadAllText
approche a été suggérée par d'autres, vous pouvez également essayer plus rapidement (je n'ai pas testé quantitativement l'impact sur les performances, mais il semble être plus rapide queFile.ReadAllText
(voir comparaison ci-dessous)). La différence de performances ne sera visible que dans le cas de fichiers plus volumineux.Comparaison de File.Readxxx () et StreamReader.Readxxx ()
Affichage du code indicatif par ILSpy J'ai trouvé ce qui suit à propos
File.ReadAllLines
,File.ReadAllText
.File.ReadAllText
- Utilise enStreamReader.ReadToEnd
interneFile.ReadAllLines
- Utilise également enStreamReader.ReadLine
interne avec la surcharge supplémentaire de créer leList<string>
retour en tant que lignes de lecture et de boucler jusqu'à la fin du fichier.Donc, les deux méthodes sont une couche supplémentaire de commodité construite sur
StreamReader
. Cela est évident par le corps indicatif de la méthode.File.ReadAllText()
implémentation décompilée par ILSpyla source
File.ReadAllText
?File.ReadAllText()
s'agit simplement d'un wrapperStreamReader.ReadToEnd()
. Je suppose que la couche supplémentaire devrait fonctionner légèrement plus lentement queStreamReader.ReadToEnd()
.ReadAllText
c'est juste un wrapper pourstreamReader.ReadToEnd();
?Voici la documentation MSDN
la source
Jetez un œil à la méthode File.ReadAllText ()
Quelques remarques importantes:
la source
string text = File.ReadAllText("Path");
vous avez tout le texte dans une variable de chaîne. Si vous avez besoin de chaque ligne individuellement, vous pouvez utiliser ceci:la source
la source
@Cris désolé .C'est une citation
MSDN Microsoft
Méthodologie
Dans cette expérience, deux classes seront comparées. Le
StreamReader
et laFileStream
classe seront dirigés pour lire deux fichiers de 10K et 200K dans leur intégralité à partir du répertoire de l'application.Résultat
FileStream
est évidemment plus rapide dans ce test. Il faut 50% de temps supplémentaire pourStreamReader
lire le petit fichier. Pour le gros fichier, cela a pris 27% de temps supplémentaire.StreamReader
recherche spécifiquement les sauts de ligne alors qu'ilFileStream
n'en a pas Cela représentera une partie du temps supplémentaire.Recommandations
Selon ce que l'application doit faire avec une section de données, une analyse supplémentaire peut nécessiter un temps de traitement supplémentaire. Considérez un scénario dans lequel un fichier a des colonnes de données et les lignes sont
CR/LF
délimitées. LeStreamReader
travaillerait sur la ligne de texte à la recherche duCR/LF
, puis l'application effectuerait une analyse supplémentaire à la recherche d'un emplacement spécifique des données. (Pensiez-vous que String. SubString est livré sans prix?)D'un autre côté, le
FileStream
lit les données en morceaux et un développeur proactif pourrait écrire un peu plus de logique pour utiliser le flux à son avantage. Si les données nécessaires se trouvent dans des positions spécifiques dans le fichier, c'est certainement la voie à suivre car cela réduit l'utilisation de la mémoire.FileStream
est le meilleur mécanisme de vitesse mais prendra plus de logique.la source
StreamReader.ReadToEnd
?eh bien le moyen le plus rapide qui signifie avec le moins de code C # possible est probablement celui-ci:
la source
si vous souhaitez choisir un fichier dans le dossier Bin de l'application, vous pouvez essayer de suivre et n'oubliez pas de gérer les exceptions.
la source
vous pouvez utiliser :
la source
la source
Pour les noobs qui trouvent ce truc amusant et intéressant, le moyen le plus rapide de lire un fichier entier dans une chaîne dans la plupart des cas ( selon ces repères ) est le suivant:
Cependant, le plus rapide pour lire un fichier texte dans son ensemble semble être le suivant:
Confronté à plusieurs autres techniques , il l'emportait la plupart du temps, notamment contre le BufferedReader.
la source
Vous pouvez utiliser comme ça
J'espère que ceci vous aidera.
la source
vous pouvez lire un texte d'un fichier texte dans une chaîne comme suit également
la source
la source
J'ai fait une comparaison entre un ReadAllText et StreamBuffer pour un csv de 2 Mo et il semblait que la différence était assez petite mais ReadAllText semblait prendre le dessus sur le temps nécessaire pour terminer les fonctions.
la source