Je travaille avec des fichiers texte de plusieurs gigaoctets et je souhaite effectuer un traitement de flux sur eux à l'aide de PowerShell. C'est des choses simples, il suffit d'analyser chaque ligne et d'extraire des données, puis de les stocker dans une base de données.
Malheureusement, get-content | %{ whatever($_) }
semble garder en mémoire l'ensemble des lignes à ce stade du tuyau. C'est aussi étonnamment lent, prenant beaucoup de temps pour tout lire.
Ma question est donc en deux parties:
- Comment puis-je faire en sorte qu'il traite le flux ligne par ligne et ne garde pas le tout en mémoire tampon? Je voudrais éviter d'utiliser plusieurs Go de RAM à cette fin.
- Comment puis-je le faire fonctionner plus rapidement? L'itération de PowerShell sur un
get-content
semble être 100 fois plus lente qu'un script C #.
J'espère qu'il y a quelque chose de stupide que je fais ici, comme manquer un -LineBufferSize
paramètre ou quelque chose ...
get-content
, définissez -ReadCount sur 512. Notez qu'à ce stade, $ _ dans Foreach sera un tableau de chaînes.