Wie kann man die Arbeitsspeichernutzung bei der Verwendung von PowerShell auf einen bestimmten Wert fixieren (limitieren)?
Gibt es eine Möglichkeit die Verwendung des Arbeitsspeichers zu limitieren ?
Ich benötige nämlich teilweise 38 GB Arbeitsspeicher (inkl. virtuellem Speicher) und mein Prozessor ist dabei nur zu 37 Prozent ausgelastet.
Das Problem tritt bei folgendem Skript auf, welches zur Bearbeitung von CSV Dateien dient:
Die Technischen Daten meines Rechners sind:
Prozessor: Intel i7 2600k 4 Kerne, 8 Threads, 4 GHz
Arbeitsspeicher: 16 GB (4 Module, laufen im Dual Channel Modus)
OS: Windows 10 64 Bit Enterprise
PowerShell Version: 5.0.10240.16384
Wünschenswert wäre, wenn die Arbeitsspeicher Nutzung von Powershell auf 12 GB Limitiert wird, da mein Rechner im idle ca. 4 GB benutzt.
VG
Rippchen
Ich benötige nämlich teilweise 38 GB Arbeitsspeicher (inkl. virtuellem Speicher) und mein Prozessor ist dabei nur zu 37 Prozent ausgelastet.
Das Problem tritt bei folgendem Skript auf, welches zur Bearbeitung von CSV Dateien dient:
$folder = 'C:\Users\ICH\Desktop\Import'
$out = 'C:\Users\ICH\Desktop\Export\Gesamt.csv'
gci $folder -Filter *.csv -recurse | %{
$raw = ((gc $_.FullName) | select -Skip 1)
$csv = $raw[0..($raw.GetUpperBound(0)-0)]| ConvertFrom-CSV -Delimiter ";" -Header "1","2","Timestamp","4","Modification Timestamp","6","7"
$csv | group {get-date $_.Timestamp} | %{
$_.Group | sort {get-date $_.'Modifikation Timestamp'} -Descending | select -First 1
} | Sort "Timestamp", "Modification Timestamp" -descending | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8
}
Die Technischen Daten meines Rechners sind:
Prozessor: Intel i7 2600k 4 Kerne, 8 Threads, 4 GHz
Arbeitsspeicher: 16 GB (4 Module, laufen im Dual Channel Modus)
OS: Windows 10 64 Bit Enterprise
PowerShell Version: 5.0.10240.16384
Wünschenswert wäre, wenn die Arbeitsspeicher Nutzung von Powershell auf 12 GB Limitiert wird, da mein Rechner im idle ca. 4 GB benutzt.
VG
Rippchen
Please also mark the comments that contributed to the solution of the article
Content-Key: 305709
Url: https://administrator.de/contentid/305709
Printed on: April 24, 2024 at 23:04 o'clock
5 Comments
Latest comment
Hallo,
Gruß,
Peter
Zitat von @Rippchen:
Das Problem tritt bei folgendem Skript auf, welches zur Bearbeitung von CSV Dateien dient:
Welches Monster an CSV Datei hast du denn? 50TByte?Das Problem tritt bei folgendem Skript auf, welches zur Bearbeitung von CSV Dateien dient:
Ich benötige nämlich teilweise 38 GB Arbeitsspeicher
Wie hast du dies festgemacht bei deinen 16 GB RAM?Gruß,
Peter
$raw.GetUpperBound(0)-0
Was soll dieses Konstrukt denn bwirken?? Völlig überflüssig wenn der Upperbound sowieso gleich bleibt...Benutze weniger Variablen in der Schleife und lade nicht die gesamte CSV auf einmal in den Speicher sondern pipe:
$folder = 'C:\Users\ICH\Desktop\Import'
$out = 'C:\Users\ICH\Desktop\Export\Gesamt.csv'
gci $folder -Filter *.csv -recurse | %{
gc $_.FullName | select -Skip 1| ConvertFrom-CSV -Delimiter ";" -Header "1","2","Timestamp","4","Modification Timestamp","6","7" | group {get-date $_.Timestamp} | %{$_.Group | sort {get-date $_.'Modifikation Timestamp'} -Descending | select -First 1} | Sort "Timestamp", "Modification Timestamp" -descending | export-csv $out -Append -Delimiter ";" -Notype -Encoding UTF8
[System.GC]::Collect()
}
Nutze parallele Threadverarbeitung, z.B. mit Jobs (Start-Job)
Ein Single-Thread wird deinen Prozessor so nie auslasten, das versteht sich ja von selbst denn Powershell startet ja meist im STA (Single Thread Appartment) Mode.
Powershell-Workflows sind dafür z.B, perfekt geeignet mehrere Aufgaben parallel zu verabeiten:
https://blogs.technet.microsoft.com/heyscriptingguy/2012/12/26/powershel ...
Ein Single-Thread wird deinen Prozessor so nie auslasten, das versteht sich ja von selbst denn Powershell startet ja meist im STA (Single Thread Appartment) Mode.
Powershell-Workflows sind dafür z.B, perfekt geeignet mehrere Aufgaben parallel zu verabeiten:
https://blogs.technet.microsoft.com/heyscriptingguy/2012/12/26/powershel ...