Announcement

Collapse
No announcement yet.

Ram freigeben ?

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

  • #16
    <pre>

    <code><font size=2 face="Courier New"><b>type
    </b>PPtr = ^TPtr;
    TPtr = <b>packed record
    </b>Next: PPtr;
    <b>end</b>;
    <br>
    <b>procedure </b>CleanMemory;
    <br>
    <b>procedure </b>Release(P: PPtr);
    <b>begin
    if </b>P &lt;&gt; <b>nil then
    begin
    </b>Release(P.Next);
    VirtualFree(P, <font color="#0000FF">0</font>, MEM_RELEASE);
    <b>end</b>;
    <b>end</b>;
    <br>
    <b>var
    </b>R,P: PPtr;
    S: Cardinal;
    L: Integer;
    K: PChar;
    M: TMemoryStatus;
    <b>begin
    </b>R := <b>nil</b>;
    S := <font color="#0000FF">1024 </font>* <font color="#0000FF">64</font>;
    <b>try
    repeat
    </b>P := VirtualAlloc(<b>nil</b>, S, MEM_COMMIT, PAGE_READWRITE <b>or </b>PAGE_NOCACHE);
    <b>if </b>P &lt;&gt; <b>nil then
    begin
    </b>K := PChar(P);
    L := <font color="#0000FF">0</font>;
    <b>while </b>L &lt; S <b>do
    begin
    </b>K^ := <font color="#0000FF">#55</font>;
    Inc(K, <font color="#0000FF">1024</font>);
    Inc(L, <font color="#0000FF">1024</font>);
    <b>end</b>;
    P.Next := R;
    R := P;
    <b>end else </b>S := S <b>shr </b><font color="#0000FF">1</font>;
    M.dwLength := SizeOf(M);
    GlobalMemoryStatus(M);
    <b>until </b>(S = <font color="#0000FF">0</font>) <b>or </b>(M.dwMemoryLoad &gt;= <font color="#0000FF">99</font>);
    <b>finally
    </b>Release(R);
    <b>end</b>;
    <b>end</b>;
    </font>
    </code></pre>
    &#10

    Comment


    • #17
      Es besteht ein gewaltiger Unterschied zwischen mit GetMem() oder VirtualAlloc() angefordertem Speicher und tatsächlich genutzten Speicher. Das OS ist schon so clever zu erkennen das du den mit getMem() angeforderten Speicher überhaupt nicht nutzt. Erst wenn wirklich auch dieser Speicher gelesen oder geschrieben wird, wird der Speicher im Hauptspeicher fixiert.<br>
      Obiger Code verdeutlicht das sehr gut, einfach mal die Loop in der K^ := #55 gesetzt wird auskommentieren.<br>

      Gruß Hage

      Comment


      • #18
        @Gesine, na alte Kämpferin Ich habe es mittlerweile aufgegeben den Jungen was von effizienter und zielorientierter Programierung zu verklickern.<br>
        Sieh's einfach so: Jeder muß mal seine Erfahrungen machen und lernt natürlich so dazu. Übrigens auch Du oder Ich haben wahrscheinlich mal so angefangen

        @Juliman, sieh's nicht so eng. Im grunde treffen hier zwei Welten aufeinander, JEDE hat seine Berechtigung. <br>
        Grundsätzlich ist aber das was du versuchst reine Zeitverschwendung und mit einem "weinenden" Auge bedauere ich nicht soviel Zeit wie du zu haben.

        Gruß hage

        Comment


        • #19
          Hi Juliman,

          Worauf ich hinaus wollte:

          1)
          Wähle immer das richtige Werkzeug, um ein Problem effektiv zu lösen. Im Zweifel bedeutet dies sogar einen, oft auch viel einfacheren und kostengünstigeren, BS-Wechsel.

          2)
          Der in EDV-Umgebung gern zitierte und dummerhaftige Spruch 'geht nicht gibt's nicht' führt nie zum Ziel, sondern verbrennt nur ( meistens deine ) wichtige Lebenszeit.

          3)
          Kaum ein Problem lässt sich heute, egal auf welcher aktuellen Hardware und welchem BS, nicht lösen sofern der passende Algorithmus gewählt wurde.

          4) Wie kann man heute Arbeitsspeicherprobleme bekommen, wenn man 1GB fast auf'm Grabbeltisch bekommt ??

          Gruß
          Gesine

          P.S.
          Soviel zum Wort zum Montag ;-

          Comment


          • #20
            Hi Hagen,

            Irgendwie bin ich heute extrem lahm. Schon wieder drei Beiträge <b>während</b> des Schreibens verpennt.

            Oh Gott, ich glaub' ich werd' alt. ;-)

            Gruß
            Gesin

            Comment


            • #21
              Hi Hagen und Gesine,

              herzlichen Dank für eure klasse Hilfe. Hagens Quellcode funktioniert einwandfrei und ist auch ziemlich einfach zu verstehen.<br>
              Klar kann man einfach mehr Ram kaufen, bloß hilft mir das auch nicht weiter, wenn einfach viele Müll-DLLs geladen sind und den Arbeitsspeicher verstopfen.<br>
              Natürlich habe ich auch nicht viel Zeit, wahrscheinlich aber noch mehr als du, Hagen... Trotzdem wollte ich dieses Problem lösen :-).<br><br>
              Nochmals herzlichen Dank !<br>
              <br>
              Zuletzt editiert von Gast_1; 31.03.2010, 13:11.

              Comment


              • #22
                <i>wenn einfach viele Müll-DLLs geladen sind und den Arbeitsspeicher verstopfen.</i><br>

                und genau das ist kein Argument ! Wenn viele DLL's den RAM verstopfen und ein Prozess mehr Speicher anfordert als vorhanden ist wird automatisch Platz geschafft indem diese wenig genutzten Module in die Swapdatei ausgelagert werden. Windows lagert nun genau so viel aus wie nötig ist um dem Prozess seinen Speicher geben zu können. Es kommt sogar noch besser. Windows erkennt nämlich sehr genau wann eine Anwendung/Prozess in den Hintergrund verlagert wird und lagert präventiv in der Leerlaufzeit dessen Module aus. Damit schafft windows je nach Situation immer genügen verfügbaren Speicher OHNE das es viel Zeit kostet. bzw ohne das es wertvolle Zeit kostet.<br>
                Fazit: egal welche Argumente Du anführst in JEDEM Szenario wird Windows den optimaleren Weg gehen. Das liegt einfach daran, daß sich viel hellere Köpfe als wir es je sein werden darüber schon jahrelang Gedanken gemacht haben.<br>
                Übrigens, aufbauend auf diesen Gedanken setzen z.B. Gesine und ich voraus das sich darum jedes vernünftige OS und deren Entwickler kümmern und somit das Rad nicht zweimal erfunden werden muß.<br>
                Ein gutes Swapping und Virtuelles Speichermanagement gehört zu jedem guten OS !

                Gruß Hage

                Comment


                • #23
                  Hallo,

                  wenn die Anwendung unter Windows NT 4/2000/XP läuft, räumt die Win32-API-Funktion <b>SetProcessWorkingsetsize</b> auf Wunsch so auf, dass die eigene Anwendung die maximal verfügbaren Speicher erhält

                  Comment

                  Working...
                  X