Arbeitsspeicher leeren / optimieren



  • volkardus schrieb:

    ich rede gar nicht von rauswerfen, sondern von defragmentieren.

    Wie defragmentioerest du denn den Arbeitsspeicher? Der Zugriffs ist doch sowieso wahlfrei, alsi es wird direkt adressiert, da muss keine Lesekopf hin und her springen.

    und natürlich ist win optimierbar. wer schaltet nicht fast die hälfte der systemdienste aus, weil er sie nicht braucht? win ist für "normaluser" optimiert. das erste, was man nach dem office-installiern macht, ist diesen office-schnellstart aus dem autostart zu nehmen.

    Das hat jetzt aber nichts mehr mit dem Thema zu tun.

    und wir können ja nicht wie die linuxer einfach den kernel patchen oder so, weil win closed source ist. erinnert euch mal an outlook-express, wo man keine *.exe empfangen kann. es gibt zusatztools zum installieren (nicht von microsoft!), die outlook erst patchen, daß es doch geht.

    Hat auch nichts mit dem Thema zu tun.



  • Der Zugriffs ist doch sowieso wahlfrei, alsi es wird direkt adressiert, da muss keine Lesekopf hin und her springen.

    naja, so wie Luckie es sagt kann man wirklich nicht von Defragmentieren reden weil defragmentieren ja das neuordnen von fragmentierten Dateien in einem Dateisystem. Und "Lücken" im ram interessieren ja nicht weil es ja direkt adressiert ist.

    Ich spreche vielmehr von einer Speicherbereinigung in der ich nichtmehr benötigten Speicher frei machen will.



  • Und woher willst du wissen, was nicht mehr benötigt wird? das weiß nur Windows und du hast keine Chance dadran zu kommen.



  • Und selbst wenn du da ran kommst, glaub ich, dass sich da inteligentere Leute mit beschäftigt haben, als du jemals ein wirst!



  • Memory-Leaks werden von Windows spätestens nach dem Schließen der betreffenden Anwendung weggeräumt...



  • Was haltet ihr von SetProcessWorkingSetSize?



  • Ich halte davon wenig: Sollte man wohl eher nutzen, wenn man weiss wieviel Speicher der Prozess etwa benötigt, damit der Speicher weniger gerne ins pagefile gehauen wird.
    Wenn man falsch damit umgeht wird man das System aber dadurch wohl eher langsamer machen...



  • d.h. die meisten Ram-Säuberprogramme füllen einfach den RAM, Windows lagert sie in den virtuellen Arbeisspeicher und somit ist keine wirkliche Effizienzsteigerung möglich. Es sei denn die geladenen Programme greifen gerade nicht auf den ausgelagerten Speicher zu?



  • jupp.

    Generell gibt Windows jedem Programm erstmal 2 GB virtuellen Speicher.
    Wenn du dir mit malloc() oder new oder sonstwie Speicher besorgst in deiner Anwendung sind die von diesen 2 GB abgezogen worden.

    Wenn nun die Anwendung auf eine Speicheradresse zugreift, die vorher nicht reserviert wurde (mit malloc() oder new oder VirtualAlloc() oder sonstwie...) gibt es die bekannte "Access violation" 😉

    Wenn eine Anwendung sich irgendwann mal mit mit VirtualAlloc() z.B. RAM geholt hat, der im virtuellen Speicher z.B. die Adresse 0x200 hat und die Adresse Ewigkeiten nicht mehr benutzt hat, dann lagert Windows solche Speicherstellen gerne im Pagefile (die lustige Auslagerungsdatei) aus, damit der echte physikalische Arbeitsspeicher wieder freier wird.
    Nach Jahren nun greift die Anwendung aber nun doch wieder auf die Speicherstelle zu, nun befindet sich der Speicherinhalt gar nicht mehr im RAM und nur noch im Pagefile: Es wird jetzt ein sogenannter Seitenfehler erzeugt (davon kriegt die anwendung nichts mit ;D)
    Windows holt sich jetzt den speicherbereich aus dem pagefile wieder in den ram.
    Die Adresse 0x200 kann also im physik. RAM irgendwo (z.B. bei 0x666) sein 😉

    Wenn jetzt eine Anwendung 1 GB RAM mit malloc() reserviert, wird Windows erstmal den physik. Arbeitsspeicher anderen Anwendungen abziehen und ins pagefile schreiben. Jetzt gibt die Anwendung den GB wieder frei. Jetzt sieht es erstmal im Taskmanager so aus, als wäre mächtig viel RAM frei geworden - und man wird sehen das das pagefile evtl. recht groß geworden ist 😉

    So, nun hat man noch Photoshop im Hintergrund offen gehabt und möchte damit nun wieder arbeiten. In Photoshop waren mehrere Bilder offen, die auch noch recht viel RAM belegt hatten.
    Photoshop möchte jetzt auf die Bilddaten im RAM zugreifen, Windows stellt fest: Mist - Der Kram ist im pagefile. Zack, wurde nen Seitenfehler generiert und der Kram muss erst aus dem pagefile wieder zurück in den ram kopiert werden.

    An sich ist nen Seitenfehler nichts schlimmes (ab win2k glaube ich, kann man sich die seitenfehler die die prozesse erzeugen auch mit dem taskmanager angucken, wenn man die spalte einblendet) - Das blöde daran nur: Das Kopieren von der Festplatte in den RAM kostet Zeit und fürs Betriebssystem kommt noch die Zeit um das zu Verwalten dazu 😉
    Daher bringt das ganze eher wenig bis gar nichts 😉

    (Ich hab jetzt hoffentlich nicht totalen Blödsinn erzählt ;D)



  • Domio schrieb:

    d.h. die meisten Ram-Säuberprogramme füllen einfach den RAM, Windows lagert sie in den virtuellen Arbeisspeicher und somit ist keine wirkliche Effizienzsteigerung möglich.

    jup.
    und was ich geschrieben hatte, war hochgradiger unfug. natürlich habe ich keinen ram-defragmentierer zum verkauf anzubieten. und ich habe auch keinen schimmer, was es bedeuten soll, das system überkritisch zu machen.



  • geeky schrieb:

    (Ich hab jetzt hoffentlich nicht totalen Blödsinn erzählt ;D)

    Nein alles absolut korrekt. Man sollte eventuell noch ergänzen, dass das Aualagern ein recht aufwendiger Prozess ist.

    Nehmen wir mal folgendes Scenarioan : Ein Thread greift auf einen Speicherblock zu. Was passiert?
    1.) Einfachster Fall: Daten sind im RAM vorhanden, dann erfolgt ein einfacher Zugriff.
    2.) Dumm gelaufen, dein RAM Optimierer war gerade am Werk: Sind die Daten in der Auslagherungsdatei? Nein, das wars dann gewesen.
    Ja: Ist im RAM was frei? Nein? Daten suchen, die ausgelagert werden können. Wurden sie geändert? Nein, einfach überschreiben. Ja, in Auslagerungsdatei schreiben. Wenn doch was frei ist gleich in RAM kopieren.

    (RAM wird immer "seitenweise" angesprochen. Unter Windows 2000 ist eien Seite auf PCs 4 KB groß und auf Alpha Rechner 8 KB)


Anmelden zum Antworten