Je travaille avec des fichiers texte de plusieurs gigaoctets et je souhaite effectuer un traitement en continu sur ces fichiers à l'aide de PowerShell. C'est simple, il suffit d'analyser chaque ligne et d'en 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. Il est aussi étonnamment lent, prenant un temps très long 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 l'ensemble en mémoire tampon ? J'aimerais éviter d'utiliser plusieurs gigas de RAM à cette fin.
- Comment puis-je le faire fonctionner plus rapidement ? PowerShell itérant sur un
get-content
semble être 100x plus lent qu'un script en C#.
J'espère qu'il y a quelque chose de stupide que je fais ici, comme manquer un -LineBufferSize
paramètre ou autre...