AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory-Mapped-Files zur Speicherverwaltung

Ein Thema von freimatz · begonnen am 21. Nov 2023 · letzter Beitrag vom 23. Nov 2023
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#1

Memory-Mapped-Files zur Speicherverwaltung

  Alt 21. Nov 2023, 08:12
Hallo,
ich bin hier an altem Code - aus der Zeit als noch Kilobytes teuer waren.

Da gibt es eine Klasse die Daten hält. Es geht um eine Menge von records die jeweils ca. 24 Doubles enthalten. Die Menge ist mal sehr klein z.B. 10, kann aber auch mal 100.000 sein.
Nun wird darin für kleine Mengen - konkrete bis 10 - eine TList<record> verwendet, für grössere Mengen ein Memory-Mapped-File. Das MMF hat keinen Dateinamen (ausser für Debugzwecke).
Die Windows-VCL-Anwendung wird seit einiger Zeit nur noch mit 64-Bit ausgeliefert.

Diese Klasse kann es dann auch wiederum 1000x geben.

Ich frage mich ob die Verwendung eines MMF noch Sinn macht. Lädt man nicht besser gleich alles in Speicher? Tut nicht Windows eh pagen wenn der Speicher knapp wird? (Wenn man aus der Menge ein Element benötigt, dann ist es sehr wahrscheinlich dass man alle braucht.)

Wenn ich nach MMF google, dann finde ich zumeist das als Mittel zur Interprozess-Kommunikation, nicht aber um grosse Speicher zu verwalten.

Geändert von freimatz (21. Nov 2023 um 08:15 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Memory-Mapped-Files zur Speicherverwaltung

  Alt 21. Nov 2023, 08:21
Probiere es halt aus?
Kommentiere den Code-Zweig aus, der das MMF anlegt und prüfe anhand eines passenden Unit-Test mit Zeitmessung, ob es gleich oder besser ist.

Wenn ich mich jetzt nicht verrechnet habe, dann ist das ja auch überschaubar für heutige Arbeitsspeicher:
24 * 8 Bytes (Double) * 100.000 = 19200000 Bytes => 18750 kB => 18,31 MB.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Memory-Mapped-Files zur Speicherverwaltung

  Alt 21. Nov 2023, 08:46
Na ja ausprobieren. Ja, ich habe schon probiert. Schon gefühlt ist es mit TList schneller als mit MMF.
Wichtiger ist es jedoch, dass es funktioniert. Und letztendlich weiss ich nicht was die Anwender alles so machen.

Wir haben keine maximalen Werte spezifiziert, die ich dann auch testen könnte.

Die ca. 20MB sind ja nicht wirklich viel. Wenn das jedoch 1000x verwendet wird sind wir bei ca. 20GB. Gehts das dann mit Windows? Paged dieses dann einfach? Oder muss man da (wie früher) irgendwo eine Pagefilegrösse einstellen? Was ich gerade gegoogelt habe wird die Auslagerungsdatei automatisch verwaltet, kann auch auch fest eingestellt werden.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin
Online

Registriert seit: 15. Sep 2008
Ort: Dubai
677 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Memory-Mapped-Files zur Speicherverwaltung

  Alt 21. Nov 2023, 09:30
Wenn das ein echtes 64Bit Programm ist und die Datenverwaltung das auch weis/ausnutzt kannst Du die MMF raushauen. Mit dem virtuell verfügbaren Speicher braucht man sich da erstmal keinen Kopf machen.
Was zum Nachdenken ist eher die Frage ob es bei solchen Anwendungen Sinn macht die auf normalen Rechnern laufen zu lassen. Das sollten schon Maschienen sein die genug Ram stecken haben, denn Auslagern ist noch immer langsam und SSD gehen auch mal kaputt.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Memory-Mapped-Files zur Speicherverwaltung

  Alt 21. Nov 2023, 09:56
Wir haben keine maximalen Werte spezifiziert, die ich dann auch testen könnte.

Die ca. 20MB sind ja nicht wirklich viel. Wenn das jedoch 1000x verwendet wird sind wir bei ca. 20GB. Gehts das dann mit Windows? Paged dieses dann einfach? Oder muss man da (wie früher) irgendwo eine Pagefilegrösse einstellen? Was ich gerade gegoogelt habe wird die Auslagerungsdatei automatisch verwaltet, kann auch auch fest eingestellt werden.
Ich weiß ja nicht worum es da genau geht aber (10-100000) * (1-1000) ist halt ne ziemlich große Spanne.
Und da nur du aktuell weißt was diese Werte repräsentieren und wie dein Programm genutzt wird ist es vielleicht wichtig sich zu fragen was der durchschnittliche User macht.
Oder auch was realistische Zahlen sind, selbst wenn der User das Programm sehr ausreizt.

In der Theorie kann der User diese Datenstruktur 1000x mit jeweils 10000 Einträgen verwenden und wäre dann bei noch (gerade bei 64-Bit Anwendungen) ~1,8GB ohne Probleme dabei.
Kommt 1000x10000 realistisch/öfter vor? Also 1000 Klassen mit im Durchschnitt 10000 Records?
Rein aus dem Gefühl würde ich sagen dass das wahrscheinlich bereits Größenordnungen sind die User in der Praxis nicht oder selten erreichen werden.
Bei einer 64-Bit Anwendung und einem halbwegs modernen PC mit zumindest 16GB RAM kann man das ganze sogar nochmal vervierfachen und sollte immer noch keine ernsthaften Probleme bekommen.

Von daher sagt mir meine dass du MMFs nicht brauchst.
Aber nur du kannst wissen wie User dein Programm benutzen und ob diese extremen/maximierten Zahlen die den Speicherbedarf auf 20GB aufpumpen überhaupt realistisch sind oder ob 1,8GB oder auch ~8GB (1000x40000 Records) nicht eine mehr als ausreichende, realistische Obergrenze darstellt
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Memory-Mapped-Files zur Speicherverwaltung

  Alt 23. Nov 2023, 09:56
Danke Euch allen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz