Jump to content

Objektgröße in dem RAM


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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?

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
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?  :hmmm:

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.

Link zu diesem Kommentar
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 ;-) 

Link zu diesem Kommentar
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.

 

Link zu diesem Kommentar
  • 2 Wochen später...
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.

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...