Announcement

Collapse
No announcement yet.

Ram freigeben ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ram freigeben ?

    Hallo allerseits !<br>

    In meinem Projekt muss ich aufgrund einer etwas größeren Berechnung Arbeitsspeicher freigeben.<br>
    Weiß jemand, wie man Arbeitsspeicher freigibt ?<br>
    Schöne Grüße und herzlichen Dank für die Hilfe,<br>
    Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

  • #2
    Hi,

    also Speicher einer anderen Anwendung kannst du nicht so einfach freigeben. Du kannst nur Speicher, den dein Programm belegt, wieder freigeben (je nach dem mit Freemem bei Zeigern oder mit <objectname>.free bei Objekten).

    Uw

    Comment


    • #3
      Hallo,<br>
      aber es gibt ja auch extra Programme, wie beispielsweise FreeMEM, die genau das machen.<br>
      Stellt sich die Frage, wie es geht...<br>
      Schöne Grüße,<br>
      Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

      Comment


      • #4
        Ganz einfach. FreeMEM gibt keinen Speicher frei sondern alloziert immer mehr Speicher beim System. Irgendwan beginnt das System all die nicht benutzten RAM Pages "freizugeben" und den Speicher der geladenen Module in die Swapdatei auszulagern. FreeMEM macht das solange bis das System keinen weiteren Speicher mehr hat. In diesem Moment gibt FreeMEM den komplett temporär allozierten Speicher wieder frei. D.h. FreeMEM gibt keinen Speicher frei sondern veranlasst das System soviel wie möglich an Speicher FreeMEM zur Verfügung zu stellen.

        Gruß hage

        Comment


        • #5
          Hallo Hagen,<bd>
          aber trotzdem funktioniert das Prinzip, oder könnte man sagen, dass FreeMem Spielerei ist ?<bd>
          Schöne Grüße,<bd>
          Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

          Comment


          • #6
            Jo natürlich funktioniert das, ich korrigierte nur die Feststellung das FreeMEM <b>nichts</b> freigibt sondern eher noch <b>mehr alloziert</b>

            Comment


            • #7
              Hallo Hagen,<br>
              wie könnte ich denn dann z.B. 32 MB allozieren und wieder freigeben ?<br>
              MFG,<br>
              Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

              Comment


              • #8
                Hallöchen nochmals,<br>
                in VB ginge das so :<br>
                <br>
                Mystring = Space(80000000)<br><br>
                Aber wie funktioniert das dann in Delphi ?<br>
                Schöne Grüße,<br>
                Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

                Comment


                • #9
                  GetMem(Ptr, 1024 * 1024 * 32); oder mit Windows-API<br>
                  VirtualAlloc()

                  Comment


                  • #10
                    Hi,

                    1)
                    Direktes Gegenstück ist wohl die Funktion StrAlloc(). Etwas allgemeiner z.B. GlobalAlloc().

                    2)
                    FreeMEM versucht nichts anderes, als über einen 'Trick' den tatsächlich vorhanden physikalischen Speicher 'freizumachen', indem es durch eigene Speicherallozierung alle 'Fremd-'Belegungen in den Swap-Bereich zwingt. Gibt FreeMEM danach den vorher allozierten Speicher wieder frei ist die Wahrscheinlichkeit, dass ein danach allozierendes Programm von vorne herein den lahmen, virtuellen Speicher bemühen muss geringer ( genauer: Lediglich der Zeitpunkt des zeitintensiven Auslagerns wird damit bestimmbarer ).

                    3)
                    Den gleichen Effekt kann man natürlich mit den vorgenannten Funktionen auch erreichen.

                    Gruß
                    Gesin

                    Comment


                    • #11
                      Hallo !<br>
                      Ich habe gerade versucht, mein Problem mit <br>"GetMem(Ptr, 1024 * 1024 * 32);<br>
                      FreeMem(Ptr);<br>
                      zu lösen. Bloß gibt es keinen Unterschied zu messen, vorher sowie nachher, d.h. dass das Problem mit dem Code noch nicht gelöst ist. Auch StrAlloc und GlobalAlloc haben leider zu keiner Veränderung der Arbeitsspeicherbelegung geführt.<br>
                      Herzlichen Dank für weitere Hilfe,<br>
                      schöne Grüße,<br>
                      Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

                      Comment


                      • #12
                        Hi,

                        1)
                        Na dufte, damit hast Du eben 32Mb speicher alloziert und gleich wieder freigeben. Hat deine Maschine nur 32Mb RAM ?? Wo/Wann hast Du gemessen ??? ;-)

                        2)
                        Du wirst deinem System so auch nie auch nur ein Byte <b>mehr</b> Arbeitsspeicher entlocken. Der Punkt ist nur <b>wo</b> der Speicher alloziert wird.

                        3)
                        Die korrekte Entscheidung, wann Speicher effektiv auszulagern ist, bestimmt übrigens masgeblich die Qualität eine Betreibssystems. Eine Applikation sollte sich darauf einfach nur verlassen können !

                        4)
                        Selbst die Funktionen zu Speicherbestimmung waren bei M$ schon immer eher geschätzter Natur...

                        Gruß
                        Gesin

                        Comment


                        • #13
                          Hi Gesine <br>
                          1) Natürlich hat mein Maschinchen hier mehr als 32 MB Ram. Insgesamt 128, sollte also für ne Messung reichen. Ich habe einfach mal probiert, 64 MB zu allozieren und dann natürlich gleich wieder freizugeben(ist doch richtig so, oder muss man da ne wartepause einlegen ???). Hat wiegesagt leider nicht geklappt, ich habe es mit FreeMem selbst gemessen, und das gibt eigentlich schon nen korrekten Wert an.<br><br>
                          2)Wie kann ich denn Arbeitsspeicher "freidrängen" ???<br><br>
                          3)OK, MS ist verpeilt, das ist klar <br><br>
                          Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

                          Comment


                          • #14
                            Hi Juliman,

                            Du hast offensichtlich meinen Beitrag gelesen, bevor ich meinen letzen Gedanken zu Wege gebracht habe ( jetzt Punkt 3 )

                            Nun nochmal ( auch korrigiert, ohne Tippfehler )

                            3) Die korrekte Entscheidung, wann Speicher effektiv auszulagern ist, bestimmt übrigens massgeblich die Qualität eine Betriebssystems. Eine Applikation sollte sich darauf einfach nur verlassen können !

                            Gruß
                            Gesin

                            Comment


                            • #15
                              Hi Gesine,<br>
                              Du hast Recht, wenn Du sagst, dass Windows alleine entscheiden muss, wann es auslagert und wann nicht. Mein Problem ist nur, dass ich diese Funktion benötige, sprich, ich kann mich nicht auf das OS verlassen.<br>
                              Und wie man sieht, scheint es ja machbar zu sein, siehe FreeMem.<br>
                              Schöne Grüße,<br>
                              Zuletzt editiert von Gast_1; 31.03.2010, 13:10.

                              Comment

                              Working...
                              X