2010-11-09 19 views
2

Lors de l'exécution de ce script à partir de Powershell or Batch: find and replace characters dans Windows XP (Powershell 1.0) tout va bien. Mais après que le script a cessé de traiter un fichier texte, Powershell détient toujours plus de 1 000 000 Ko de mémoire (lorsqu'il est inspecté à partir de TaskManager) et il ne semble pas libérer l'utilisation de la mémoire. Je vais devoir tuer le processus de Powershell pour libérer la mémoire. Comment éviter cette énorme utilisation de la mémoire?Powershell ne libère pas la mémoire

+0

FWIW: Vous devriez vraiment pas utiliser le() autour de la Get-Content sauf si vous devez absolument modifier le fichier en place - il provoque toutes les lignes à collecter avant le remplacement, ce qui va être très cher avec de gros fichiers – Jaykul

+0

Merci, cela a eu un effet énorme! – jjoras

Répondre

5

Essayez

[GC]::Collect() 

qui impose la collecte des ordures

+0

Merci, fonctionne lika un charme! – jjoras

0

Il semble qu'il y ait une fuite de mémoire dans Get-Content.

[GC] :: Collectez ne fonctionne pas dans notre cas lors du chargement ~ 6000 documents et nous avons dû utiliser un StreamReader à la place:

$sr = New-Object System.IO.StreamReader($filepath) 

... 

$sr.Dispose()