Speichernutzung limitieren



  • @volkard
    Filemapping - meinst Du damit, dass Du alle Quelldateien ständig filegemappt offenhältst (das könnten bei mir u. U. mehrere Hundert werden)?

    Diese Lösung dürfte bei mir nicht funktionieren, da die Datenblöcke nach dem Voraus-Laden noch im Hintergrund (zeitaufwendig) bearbeitet werden, und nach der Bearbeitung soll auf sie zur visuellen Präsentation schnell zugegriffen werden können.



  • Ja, auch hunderte offen quälen mich nicht.
    Aber die Bearbeitung macht da einen Strich durch die Rechnung. 😞



  • Für dein Vorhaben benötigst du keinen aussagekräftigen Wert.
    Du lädst einfach solange Daten, bis dwMemoryLoad einen bestimmten Wert überschreitet.



  • Danke trotzdem!

    Vorangig suche ich auch nach einer Faustformel für die Abschätzung einer Speichermenge, die meine Applikation "gefahrlos" für das Vorab-Laden und -Bearbeiten aquirieren kann, ohne dass die Systemperformance beeinträchtigt wird, und vor allem ohne dass innerhalb meiner Applikation vom System wieder ausgelagert wird.



  • ... letzte Beitrag war @volkard



  • @Athar
    > dwMemoryLoad

    - Kannst Du Maximalwerte empfehlen?
    - Ist sichergestellt, dass das System bei niedrigem Wert nicht trotzdem auslagert?

    Wenn ich bei Systemen mit unterschiedlich Arbeitsspeicher die gleichen Werte für dwMemoryLoad verwende, verschenke ich meines Erachtens Arbeitsspeicher, da bei größerem Arbeitsspeicher der Anteil des Systems und der anderen Applikation relativ weniger wird. Da erscheint mir ullAvailPhys sinnvoller.



  • Wirklich sichere Möglichkeit gibt es keine. Sagen wir du würdest eine Möglichkeit finden genau so viel Daten zu laden, dass das System gerade noch nicht anfängt irgendwas auszulagern.
    Und ein paar Sekunden später läuft irgend ein Task in irgend einem Programm/Service/... los, der kurzfristig 100 MB Speicher braucht. -> 100 MB werden ausgelagert.

    Aber du schreibst zig-Megabyte-Bereich. Wenn du nicht gerade Rechner mit 512 MB RAM oder weniger unterstützen willst (musst), würde ich mir bei <= 100 MB keine Gedanken machen. Lade & bearbeite einfach alles.



  • > Wenn du nicht gerade Rechner mit 512 MB RAM oder weniger unterstützen willst

    Tja, muss ich leider, selbst 256 MB kann ich nicht ausschließen ...

    Wenn ich ALLES vorab lade und bearbeite, lagert das System irgendwann aus. Greife ich dann vom GUI-Thread zur Visualierung auf die Daten zu, holt das System die Daten von der Platte, dieser Zugriff bringt dann die Anzeige zum Stocken.
    Das Vorabladen und -bearbeiten wird hingegen von einem eigenen Hintergrundthread durchgeführt, ohne die UI zu behindern. Deswegen wollte ich gerade nur soviel vorab bearbeiten, dass eine Auslagerung mit ausreichender Wahrscheinlichkeit nicht stattfindet. Wenn es dennoch mal passiert, weil eine andere Anwendung viel Speicher braucht, wäre das zu akzeptieren.



  • > Aber du schreibst zig-Megabyte-Bereich.

    Hat ich noch vergessen: zig bis hunderte Dateien in jeweils dieser Größe, da können insgesamt durchaus 1 - GB anfallen.



  • mox schrieb:

    Deswegen wollte ich gerade nur soviel vorab bearbeiten, dass eine Auslagerung mit ausreichender Wahrscheinlichkeit nicht stattfindet. Wenn es dennoch mal passiert, weil eine andere Anwendung viel Speicher braucht, wäre das zu akzeptieren.

    Hm. In dem Fall würde ich es vermutlich mal mit einer einfachen Rechnung ala

    MaxPreLoad = (TotalPhysMem - K) * L
    

    versuchen.
    K und L müsstest du dabei experimentell ermitteln.
    Ich würde mal mit K = 200MB und L = 0.5 anfangen.

    Oder du lässt es gleich den User einstellen. Und natürlich kann man auch beide Optionen anbieten (z.B. Einstellung -1 für automatisch).

    Ältere Photoshop Versionen haben das so in der Art gemacht - die haben als Grenze für RAM Verbrauch einfach per Default 50% des pyhsikalischen Speichers angenommen. Wobei man die % in den Einstellungen anpassen konnte.


Anmelden zum Antworten