Parabol 1 Geschrieben 15. August 2023 Melden Teilen Geschrieben 15. August 2023 Als Beispiel: $Auflistung = Get-Childitem -Literalpath 'c:\windows\servicing' -Recurse -Force -ErrorAction:SilentlyContinue Mehrere unterschiedliche Auflistungen, auch als Zeichenfolgearray. Wie kann man die RAM-Belegung von solchen Variable abfragen? Es geht nicht um Arraylänge. Spätestens, wenn es nicht um Zeichenfolgearray geht, wie kann man die in Ram von Objektenarray belegte Größe wissen? Zitieren Link zu diesem Kommentar
mwiederkehr 373 Geschrieben 16. August 2023 Melden Teilen Geschrieben 16. August 2023 Das geht wohl nur über Umwege: Speicherbelegung messen, Objekt erstellen, Speicherbelegung nochmals messen, Differenz bilden. Damit weisst Du, wie viel mehr RAM das Script nach Instanziierung des Objekts benötigt. Je nachdem, wie das Objekt aufgebaut ist, benötigt es selbst aber weniger Speicher und ein Teil des Speichers ist frei, um vom Garbage Collector geleert zu werden. (Wenn man einem String ein Zeichen hinzufügt, wird ein neuer Speicherbereich alloziert und der String sowie der Zusatz werden dorthin kopiert. Der vorherige Speicherbereich wird als frei markiert. Wenn ein Objekt gewisse Felder durch String-Concatenation füllt, kann es viel als frei markierten Speicher geben.) Etwas näher kommst Du der "Wahrheit" also noch, indem Du vor der ersten und zweiten Messung den Garbage Collector aufrufst. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 16. August 2023 Melden Teilen Geschrieben 16. August 2023 vor 14 Stunden schrieb Parabol: Wie kann man die RAM-Belegung von solchen Variable abfragen? Nur mal aus Neugier ... wofür brauchst Du das? Zitieren Link zu diesem Kommentar
Parabol 1 Geschrieben 16. August 2023 Autor Melden Teilen Geschrieben 16. August 2023 vor 1 Stunde schrieb mwiederkehr: Das geht wohl nur über Umwege Ok, die habe ich mir zur Not auch schon vorgestellt. vor einer Stunde schrieb BOfH_666: Nur mal aus Neugier ... wofür brauchst Du das? Will anschauen, ob es Sinn macht die Kollektionen (welche dann und ab wann) enger zu machen, um mit ihnen dafür im Ram, anstatt daß sie ausgelagert werden, zu jonglieren. Zitieren Link zu diesem Kommentar
q617 1 Geschrieben 16. August 2023 Melden Teilen Geschrieben 16. August 2023 Da gabs mal früher was in der PowerShell, ist aber weggefallen, hab ich gehört. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 16. August 2023 Melden Teilen Geschrieben 16. August 2023 vor 1 Stunde schrieb Parabol: Will anschauen, ob es Sinn macht die Kollektionen (welche dann und ab wann) enger zu machen, um mit ihnen dafür im Ram, anstatt daß sie ausgelagert werden, zu jonglieren. Hmmm ... macht die Sache für mich jetzt nicht wirklich klarer, aber ok ... ¯\_(ツ)_/¯ Zitieren Link zu diesem Kommentar
cj_berlin 1.323 Geschrieben 16. August 2023 Melden Teilen Geschrieben 16. August 2023 Auf die Auslagerung kannst Du nun wirklich keinen Einfluss nehmen. Wenn Deine Sammlungen so gigantisch sind, dass geswappt wird, wenn Du sie füllst, wäre aus anderen Gründen über externe Speicherung nachzudenken 😉 Zitieren Link zu diesem Kommentar
ineedhelp 12 Geschrieben 22. August 2023 Melden Teilen Geschrieben 22. August 2023 Musst das Ergebnis in eine Variable zwischengespeichert werden? Kannst Du das Ergebnis nicht direkt mit Pipeline-Operator | an den nächsten Befehl weiterleiten. Die Pipeline ist ein moderner Streaming-Mechanismus der ohne Variablen auskommt und speicherschonend arbeitet. Zitieren Link zu diesem Kommentar
cj_berlin 1.323 Geschrieben 22. August 2023 Melden Teilen Geschrieben 22. August 2023 vor 1 Stunde schrieb ineedhelp: und speicherschonend arbeitet. Hast Du dafür eine autoritative Quelle, irgendwas von Microsoft? Die Pipeline ist doch eigentlich nur dann "speicherschonend", wenn die empfangenden Cmdlets die Objekte nach der Verarbeitung sofort verwerfen. Wenn Du am Ende der Pipe Sort-Object stehen hast, kann die die Pipeline in Bezug auf die Performance nicht helfen Zitieren Link zu diesem Kommentar
ineedhelp 12 Geschrieben 22. August 2023 Melden Teilen Geschrieben 22. August 2023 Zitat Streaming-Modus: Über die Pipeline werden Ergebnisse zwischen Befehlen in Echtzeit weitergereicht. Alle beteiligten Befehle arbeiten gleichzeitig. Daher ist die Pipeline effizient und speicherschonend, aber langsam, weil ... Auszug aus Kapitel 5 Die PowerShell-Pipeline aus dem Buch PowerShell 7 und Windows PowerShell von Dr. Tobias Weltner In Bezug auf Sort-Object und Group-Object hast Du natürlich recht. Diese Cmdlets blockieren die asychrone Streaming-Verarbeitung, weil sie auch erst einmal alle Objekte kennen müssen. Zitieren Link zu diesem Kommentar
Parabol 1 Geschrieben 30. August 2023 Autor Melden Teilen Geschrieben 30. August 2023 Am 22.8.2023 um 09:12 schrieb ineedhelp: Musst das Ergebnis in eine Variable zwischengespeichert werden? Ja. Danach kommt die Weiterbearbeitung. In jeder Foreachschleife danach Gebrauchtes holen dauert schneller, als gleiches über die Pipeline. Dazu kommt, daß ich dann gleich bequem die Arrayslänge ausrechnen und sie gleich so erstellen kann, anstatt sie in der Schleife ein Element nach dem anderen zusammenstellen. Nach der Zeit gewinne ich dann in der Summe, auch wenn ich nicht gleich mit dem ersten Element über Pipeline schicke anfange. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.