 |






|
-
|
 |
|
 |
04.08.2012 20:39
-
Memory Cleaner Steuerung - Eine Möglichkeit
|
#1
|
|
|
|
|
|
|
Wir wissen, dass Sacred2 plus Addon gerne Probleme macht, vor allem mit Win 7. Bekannt ist auch, dass es in Sacred 2 auch ein Speicherleck gibt (oft auch Memory Leak genannt).
Speicherleck? Was ist das überhaupt, was bewirkt es?
Nun, ein Speicherleck ist ein Bug in einem Programm, der verhindert, dass das Programm ungenutzten Speicher wieder freigibt. Normalerweise sorgt Windows dafür, dass laufende Anwendungen nicht mehr benötigte Speicherbereiche wieder freigeben. Das geht aber nur dann, wenn das Spiel über (fehlerfreie) Routinen verfügt, welche das zulassen.
Ein Programm mit einem Speicherleck häuft also immer mehr Daten im Speicher an, ohne diesen wieder freizugeben. Für eine normale 32Bit-Anwendung können maximal 2GB RAM zugewiesen werden, dann ist Schluss. Wird diese Grenze erreicht, kann das Spiel keine neuen Daten mehr sammeln und stürzt ab (Bei Sacred2 geschah das immer dann, wenn man die Weltkarte aufrief und der Speicher voll war).
Hier kommt nun ein Memory Cleaner ins Spiel.
Was ist ein Memory Cleaner?
Ein Memory Cleaner ist ein Programm, welches die Kontrolle über den RAM erzwingen kann. Ein solches Programm ist "mächtiger" als die üblichen Windows-Routinen, daher kann ein Cleaner auch eine Anwendung mit einem Speicherleck dazu zwingen, Speicher freizugeben, der nicht mehr gebraucht wird. Daher kann ein Memory Cleaner gegen Abstürze, die durch ein Leck verursacht werden, eine Wunderwaffe sein.
Aber sie sind auch mit Vorsicht zu genießen:
Da diese Programme notgedrungen sehr tief ins System eingreifen, sind sie selber natürlich ebenfalls eine Fehlerquelle und können andere Programme von ihrer Arbeit abhalten. Der ursprüngliche Zweck solcher Cleaner war es, aus einem Computersystem mehr Leistung zu kitzeln. Früheren Computersystemen stand längst nicht so viel RAM zur Verfügung, als heutigen und auch die Speicherverwaltung älterer Betriebssysteme war nicht immer optimal. Dort konnte man mit solchen Tools unter Umständen durchaus was reißen. Man gibt diesen Programmen daher auch oft auch Namen wie "Ram Optimizer" oder ähnlich.
Wer mit Win XP oder Win 7 arbeitet, ist in der Regel auf eine Optimierung nicht mehr angewiesen. Die Windows eigene RAM-Verwaltung ist ab diesen Versionen zumindest brauchbar, wenn nicht sogar gut. Der Einsatz eines MemoryCleaners bringt hier selten wirklich was (Aber sag niemals nie, denn jedes System ist anders. Es mag Konfigurationen geben, wo man auch heute damit noch was reißen kann). Außerdem hat man heute in der Regel 2, 3, 4 oder gar mehr GB RAM zur Verfügung, was auch ohne Optimierung ausreichend ist. Außer eben, man hat eine Anwendung mit einem Speicherleck. Dann kann ein Memory Cleaner, wie oben schon erwähnt, Wunder wirken. So auch bei Sacred 2.
In der FAQ sind einige solcher Programme aufgelistet, aber leider keines für Vista oder Windows 7 (Eventuell kann ja ein Mod oder so die FAQ entsprechend ergänzen mit meinem Vorschlag, der gleich folgt). Es ist auch gar nicht so leicht, eins für Win 7 zu finden, dass zudem noch kostenlos und keine Testversion ist. Ich habe schließlich das Programm "Memory Clenaer 1.60" gefunden.
( http://www.koshyjohn.com/software/ )
Mit diesem Tool im Hintergrund laufend ist mir Sacred 2 unter Win 7 64Bit nicht einmal mehr abgestürzt (Außerdem PhysX und OpenAL deaktiviert, auch das sind zuverlässige Crash-Garanten). Alle 5 Minuten gibt das Programm nicht mehr benötigten RAM frei. Aber ich habe auch festgestellt, dass das Tool seine Schattenseiten hat, denn andere Programme auf meinem PC zeigten plötzlich Mucken oder haben nicht mehr funktioniert.
Also entwickelte ich die Idee, den Memory Cleaner eben nur dann ausführen zu lassen, so lange Sacred 2 läuft. Natürlich will man so was nicht von Hand machen müssen. Entweder vergisst man, den Cleaner vorher einzuschalten, oder ihn nachher abzuschalten. Und außerdem ist es lästig. Aber wir haben ja einen Computer, also lassen wir doch den für uns arbeiten. Windows 7 bringt eine Kommandokonsole mit sich, deren Befehle man mit einer selbst geschriebenen Datei ausführen kann. Man nennt so was eine "Batch-datei".
Ich zeige euch im folgenden Post, wie man sich eine Batch-Datei erzeugt, die folgendes kann:
- Starten des Memory-Cleaners
- Starten von Sacred2
- Beenden des MemoryCleaners, nachdem Sacred2 geschlossen wurde.
Die so erzeugte Batch Datei für Sacred 2 kann auch auf andere Programme angewandt werden, wenn man sie entsprechend anpasst. Falls ihr also auch andere Speicherleck-Kandidaten am Start habt, kann euch dieser Lösungsvorschlag dort ebenfalls helfen.
Die Anleitung gilt explizit für Windows 7 64Bit. Bei anderen Betriebssystemen können die benötigten Befehle und Parameter unter Umständen abweichen. Da ich kein anderes Betriebssystem habe, kann ich also für nichts garantieren.
Geändert von Waylinkin (04.08.2012 um 20:48 Uhr)
|
|
|
|
|
|
-
|
 |
|
 |
04.08.2012 20:40
|
#2
|
|
|
|
|
|
|
So, here we go. Nun gehts also ran an den Feind. Damit auch die Leute, die nicht so viel Ahnung von Rechnern, bzw. deren Bedienung haben, den Guide für sich nutzen können, werde ich alles ziemlich einfach halten und detailliert beschreiben. Auch die Batch-Datei selber ist kein Weltwunder. Jemand, der die Kommandokonsole in Win 7 im Schlaf beherrscht, weil er täglich damit umgeht (z.B. Sysadmins oder so) wird sich über das Konstrukt wahrscheinlich sogar kaputt lachen. Dazu sage ich nur:
Das Konstrukt ist so einfach, dass sogar jemand, der bis dato noch nie die Konsole benutzt hat, verstehen kann, was es tut und wie es funktioniert. Und es funktioniert. Und nur darauf kommt es an. Trotzdem bin ich natürlich etwaigen Verbesserungsvorschlägen nicht abgeneigt. Nur der Unwissende denkt, er weiß alles. 
Was brauchen wir:
- Win 7 64Bit
- Sacred2
- Memory Cleaner 1.60 (Link siehe oben)
Grundlagen:
Zunächst mal müssen wir sicherstellen, dass der Kommandozeileninterpreter auch auf die benötigten Befehle zugreifen kann. Bei mir hat es nämlich daran gehakt und ich brauchte einige Zeit, um dahinter zu kommen, was das Problem war. Nun, da ich die Stolperfalle kenne, werde ich euch natürlich darum herum führen. Zuerst prüfen wir, ob überhaupt ein Eingriff nötig ist:
Windows-Taste + R drücken.
In die erscheinende Textbox "cmd" tippen und "OK" klicken, bzw. Enter drücken. Es öffnet sich die Kommandokonsole von Windows.
Hier den Befehl "help" tippen und mit Enter bestätigen. Erscheint nun eine Auflistung verschiedener verfügbarer Befehle, kann das folgende Procedere übersprungen werden. Erscheint jedoch die Fehlermeldung, dass der Befehl nicht gefunden werden kann, dann müssen wir noch Hand anlegen. 
Hinzufügen der Variable "Path":
Konnte vorhin der Befehl help nicht ausgeführt werden, liegt das daran, dass Windows zwar den Befehl hat, aber er kennt ihn nicht, weil es keine Variable gibt, die Windows sagt, wo die Datei liegt, die es auszuführen gilt. Im folgenden werden wir Windows daran "erinnern", wo es suchen muss.
Dazu gehen wir in die Systemsteuerung:
"Start ---> Systemsteuerung"
Dort bitte die Ansicht auf große oder kleine Symbole stellen (Auswahlmenü rechts oben)
Dann auf "System" klicken und dort dann links auf "erweiterte Systemeinstellungen" klicken. Es öffnet sich ein neues Fenster.
Hier klicken wir auf den Button "Umgebungsvariablen". Ein weiteres Fenster öffnet sich. Uns interessiert der untere Bereich: Systemvariablen.
Wir klicken ganz unten auf "Neu". Im erscheinenden Fenster tippen wir bei "Name der Variablen" ein: Path
Und bei "Wert der Variablen": %Systemroot%\System32
%Systemroot% ist einfach eine Variable, die Windows sagt: Greife aufs Windows-Verzeichnis zu. Da es Menschen gibt, die Windows nicht unter C:\Windows installieren, sondern bisweilen ein anderes Laufwerk oder Verzeichnis wählen, ist es sinnvoll, mit Variablen zu arbeiten, da man diese nicht anpassen muss.
So wir bestätigen unsere Angaben mit Ok, und Voilà, wir haben eine Systemvariable erstellt. Zukünftig weiß Windows, wo es suchen soll, wenn wir in der Konsole einen Befehl eintippen. Um sicher zu gehen, testen wir, ob es funktioniert.
Wir öffnen wieder die Konsole, wie oben beschrieben, und tippen "help" ein. Nach Bestätigung mit der Enter-Taste sollte der Befehl help nun eine Liste aller verfügbaren Kommandozeilen-Befehle liefern.
Der Memory Cleaner:
Diese Anleitung gilt für das von mir verwendete Tool. Nutzt ihr ein anderes, müsst ihr etwaige Befehle und Verzeichnisnamen in der Batch-Datei anpassen.
Nachdem wir dem Gedächtnis von Windows auf die Sprünge geholfen haben, installieren wir nun den Memory Cleaner. Die Installation geht schnell, aber es gibt hier einen Haken, den wir ausschalten müssen, bevor wir anfangen die Batch-Datei zu schreiben:
Das Tool lässt einem keine Möglichkeit, das Installationsverzeichnis zu wählen. Und das Installationsverzeichnis ist für die Konsolenbefehle tödlich. Es lautet nämlich:
"C:\Users\Deinbenutzername\AppData\Roaming\KoshyJohn.com\MemClean"
Und das ".com" ist ein Problem. Die Konsole akzeptiert keine Punkte in Verzeichnispfadangaben. Das Problem lässt sich aber einfach beheben: Wir navigieren zum Ordner "KoshyJohn.com" und ändern den Namen ab. Wir löschen einfach den Teil ".com". Wenn ihr jetzt das Tool startet, dann wird eine Frage erescheinen, ob man das Tool noch mal installieren will. Das ist zu bestätigen. Nun wird zwar der ".com" Ordner wieder angelegt, aber der geänderte Ordner existiert weiterhin und jeder Befehl, den wir aussprechen, bezieht sich auf den geänderten Ordner. Das funktioniert bei mir einwandfrei.
Einstellungen des Tools:
Das Tool ist einfach aufgebaut und bietet nur zwei Funktionen. Deshalb gefällt es mir so gut. Warum? Ganz einfach: Je weniger Funktionen, desto weniger Fehlerquellen und desto leichter die Bedienung. Und für Sacred2 brauchen wir sowieso nur eine einzige Funktion, nämlich die, den RAM zu säubern. Warum sich einen Mercedes kaufen, wenn auch der Motorroller reicht?
Um das Tool für den gewünschten Einsatz einzurichten, genügen wenige Klicks. Wir gehen auf den Reiter "Options" und setzen einen Haken bei:
- "trim processes' working set when usage exceeds 80%"
- "trim processes' working set every 5 Minutes"
Alle anderen Haken, vor allem der, mit dem das Tool automatisch mit Windows gestartet werden soll, deaktivieren, falls aktiviert. Wir brauchen sie nicht.
So, das wars auch schon. Das Tool ist bereit für seinen Einsatz. Im nächsten Post bauen wir dann endlich die Batch-Datei.
Geändert von Waylinkin (05.08.2012 um 16:11 Uhr)
|
|
|
|
|
|
-
|
 |
|
 |
05.08.2012 15:55
|
#3
|
|
|
|
|
|
|
So, nun gehts der Batch-Datei an den Kragen. Wir öffnen den Windows-Explorer und gehen in das Sacred2-Spielverzeichnis, also z.B.
"D:\Spiele\Sacred2"
Im Prinzip ist es aber völlig egal, wo ihr die Batch-Datei ablegt. Ich hab nur gern alles zusammen. Die Datei gehört zu Sacred2, also bringe ich sie auch dort hin. 
Nachdem wir im Ordner sind, erzeugen wir eine neue Text-Datei. Dazu machen wir einen Rechtsklick in einen leeren Bereich, gehen auf "Neu" und wählen dort "Textdatei" aus. Im Verzeichnis sollte nun eine neue, leere Textdatei mit dem Namen: "Neues Textdokument.txt" erscheinen. Wenn ihr das ".txt" nicht seht, dann müsst ihr in den Ordneroptionen den Haken bei "Erweiterungen bei bekannten Dateitypen ausblenden" ENTFENREN.
Zu den Ordneroptionen gelangt ihr so:
Im Explorer links oben auf "organisieren" klicken. Dort auf "Ordner und Suchoptionen" klicken. Die oben erwähnte Option findet ihr dann unter dem Reiter "Ansicht".
Nachdem die korrekte Anzeige sichergestellt ist, ändern wir den Dateinamen ab. Mein Vorschlag: "Sacred2.bat"
Erklärung:
Ihr könnt die Datei im Prinzip nennen, wie ihr wollt. Aber die Endung .bat ist zwingend und muss beibehalten werden. Windows kann mit einer .txt nichts anfangen. Die Endung .bat signalisiert Windows aber, dass dies eine Batch-Datei ist, welche Befehle für die Konsole enthält. Wenn ihr den Namen entsprechend ändert, wird Windows die Frage stellen, ob das wirklich gemacht werden soll und darauf hinweisen, dass eine Änderung der Endung die Datei unbrauchbar machen kann. Das akzeptiert ihr. Danach werdet ihr sehen, dass das Dateisymbol zu einem Zahnrad wird. Windows weiß nun, dass dies eine Befehlsdatei ist.
Und nun gehen wir daran, die Datei zu füllen. Dabei müssen wir so tun, als wäre der Computer ein unwissendes Kleinkind, dass selber von gar nichts Ahnung hat. Und im Grunde ist das auch so. Daher werden wir ihm jeden einzelnen Schritt vorgeben. Was also soll der Computer tun? Er soll:
- In das Verzeichnis des Cleaners gehen
- Dort den Cleaner ausführen
- In das Verzeichnis von Sacred2 gehen
- Sacred2 ausführen
- Warten, bis Sacred2 beendet wird
- Nach System32 gehen (Erklärung folgt)
- Den Cleaner stoppen
Und ganz genau so werden wir nun die Datei erstellen. Ihr werdet erleben, dass das kein Hexenwerk ist, wenn man weiß, worauf es ankommt. 
Benötigte Konsolenbefehle:
"cd": Steht für "change directorie" - Befiehlt Windows, in ein anderes Verzeichnis zu springen.
Benötigte Optionen:
.. : befiehlt Windows, ein Verzeichnis höher zu gehen.
"start": Befiehlt Windows, die genannte Datei auszuführen.
Benötigte Optionen:
/wait : Befiehlt Windows, die Konsole offen zu lassen und darauf zu warten, dass die gestartete Anwendung beendet wird. Danach wird die Batch-Datei weiter ausgeführt.
"taskkill": Befiehlt Windows, den genannten Prozess im Taskmanager zu beenden. Den Namen des Prozesses findet man im Taskmanager.
Benötigte Optionen:
/F : Erzwingt die Prozessbeendigung in allen Fällen. Ist hier nötig, da der Cleaner hartnäckig ist.
/IM: Gibt Windows den Namen des Prozesses an, welcher geschlossen werden soll.
Und das wars auch schon. Mehr brauchen wir nicht. 
Haken wir nun also den ersten Punkt ab: Wir schicken Windows ins Verzeichnis des Cleaners:
C:\Users\DeinBenutzername\AppData\Roaming\KoshyJohn\MemClean
Und so sieht das als Code aus:
Code:
c:
cd Users
cd DeinBenutzername
cd Appdata
cd Roaming
cd KoshyJohn
cd MemClean
Wie gesagt: Wir sagen Windows alles vor, denn Windows ist doof. 
Punkt eins: Haken dran. Nun der zweite Punkt: Den Cleaner starten:
Ich setze jetzt fort, ohne das vorherige noch mal zu wiederholen. Am Ende zeige ich dann noch mal den kompletten Code. Sonst wird es nur unübersichtlich.
Punkt zwei: Haken dran. Das wars schon. Nun Punkt drei: Wechseln ins Sacred2-Verzeichnis:
Code:
d:
cd Spiele
cd "Sacred 2"
cd System
Hier erkennt man eine Besonderheit: Die Konsole kann mit Leerstellen nichts anfangen. Hat man einen Dateinamen oder Pfad, der eine oder mehrere Leerstellen enthält, muss man diese in " setzen. Ihr müsst natürlich daran denken, dass ihr EUER Sacred2-Verzeichnis eintragen müsst. 
Punkt drei: Haken dran. Weiter gehts mit Punkt vier: Sacred 2 ausführen:
Code:
start /wait sacred2.exe
Besonderheit hier: Wir müssen Windows sagen, dass er nun darauf warten soll, dass Sacred2 geschlossen wird. Tun wir das nicht, würde Windows ohne zu warten weiterarbeiten und sofort im Anschluss den Cleaner wieder schließen. Das ist ja nicht Sinn der Sache. Daher setzen wir hier die Befehlsoption /wait ein, um Windows zu verklickern, dass es gefälligst warten soll. Und das tut es dann auch 
Punkt vier: Haken dran. Weiter gehts mit Punkt fünf: Trotz Systemvariable müssen wir Windows noch mal "manuell" nach System32 schicken. Und dazu will Windows hier tatsächlich mal schlau sein, denn es hat sich, wenn wir nach Laufwerk C: zurückspringen, das Cleaner-Verzeichnis gemerkt und springt dort hin. Wir wollen aber nach System32, also müssen wir ein wenig arbeiten:
Code:
c:
cd..
cd..
cd..
cd..
cd..
cd..
cd..
cd %systemroot%
cd system32
Also sagen wir eben Windows ein paar mal, dass er je ein Verzeichnis zurückspringen soll, biss er wieder auf C: angekommen ist, und danach schicken wir ihn nach System32. Trotz erstellter Systemvariable hat der Befehl "Taskkill" sonst nicht funktioniert. Also geh ich eben auf Nummer sicher.
Punkt 5: Haken dran. Weiter gehts mit Punkt sechs: Stoppen des Cleaners:
Code:
taskkill /F /IM MemClean.exe
So, das wars auch schon. Nach Beendigung von Sacred2 wird nun auch der Cleaner ausgeschaltet. Noch zwei Hinweise:
Falls ihr die Datei geschlossen habt, und noch mal öffnen wollt, um sie zu bearbeiten, müsst ihr das so machen:
Rechtsklick auf die Datei und dann "Bearbeiten" auswählen. Tut ihr das nicht, sondern klickt einfach drauf, wird die Datei ausgeführt... 
Falls die Datei nicht funktioniert, wie sie soll, dann setzt ganz ans Ende der Datei noch den Befehl "Pause". Somit wird verhindert, dass die Konsole sich einfach schließt und ihr könnt so die Fehlermeldungen lesen.
Hier noch der komplette Code:
Code:
c:
cd Users
cd DeinBenutzername
cd Appdata
cd Roaming
cd KoshyJohn
cd MemClean
start MemClean.exe
d:
cd Spiele
cd "Sacred 2"
cd System
start /wait sacred2.exe
c:
cd..
cd..
cd..
cd..
cd..
cd..
cd..
cd %systemroot%
cd system32
taskkill /F /IM MemClean.exe
So, und als letztes können wir es uns noch schön machen. Zukünftig soll Sacred2 ja nicht mehr über die normale Verknüpfung gestartet werden, sondern mit der Batch-Datei. Als letztes zeige ich euch noch, wie man das schön machen kann.
Zuerst machen wir einen Rechtsklick auf die Batch-Datei. Dann wählen wir den Befehl: "Verknüpfung erstellen".
Danach benennen wir die Verknüpfung um wies euch beliebt. Der Name muss keine Endung haben. So, aber die verknüpfung sieht natürlich langweilig aus. Wir geben ihr also noch das passende Symbol:
Rechtsklick auf die Verknüpfung. Dann "Eigenschaften" wählen. Ein neues Fenster öffnet sich. Dann klicken wir auf den Button "Anderes Symbol". Es wird folgende Warnmeldung erscheinen:
"Die Datei "blablabla" enthält keine Symbole udn so weiter". Juckt uns nicht, wir klicken einfach auf OK. Es öffnet sich dann ein Fenster, in dem schon einige Symbole zu sehen sind. Wir wollen aber das von Sacred2, also klicken wir auf "Durchsuchen". Dann navigieren wir ins Sacred2 Verzeichnis und dort noch mal in "System". Dort klicken wir die sacred2.exe an. Im neuen Fenster wählen wir das Symbol davon aus und klicken auf "OK". Danach schließt sich das Fenster und wir klicken rechts unten noch auf "übernehmen". Und schon erstrahlt unsere Verknüpfung mit dem sacred2-Symbol.
Diese Verknüpfung könnt ihr dann auf den Desktop schieben, oder in die Schnellstartleiste oder auch ins Startmenü, je nachdem, wie ihr das bei euch so organisiert habt. 
EDITH sagt mir gerade, dass ich was vergessen habe:
Wer die Batch-Datei im gleichen Verzeichnis liegen hat, wie die sacred2.exe, der kann die Befehle:
Code:
d:
cd Spiele
cd "Sacred 2"
cd System
löschen. Sie sind dann unnötig, denn das Verzeichnis, in dem die Batch-Datei liegt, merkt sich Windows immer. Wer sie drin lässt, macht aber keinen Fehler, der sieht dann eben nur drei Fehlermeldungen, weil Windows versucht, in einen Pfad zu wechseln, in dem es schon ist. Funktionieren tut es trotzdem. 
So. Und weil es tausende von möglichen Konfigurationen gibt, kann es natürlich sein, dass es einfach nicht richtig funktionieren will. Dann einfach fragen. Sofern ich es kann, werde ich Hilfe leisten. Grundsätzlich gibts keine dummen Fragen, sondern nur dumme Antworten.
Geändert von Waylinkin (05.08.2012 um 17:34 Uhr)
|
|
|
|
|
|
-
|
 |
|
 |
05.08.2012 19:41
|
#4
|
|
|
|
|
 Metasyntaktische Variable
|
|
Erstmal mal vielen Dank für die Arbeit, die du dir hier machst. Ich freue mich immer, wenn einer sein Wissen teilt! 
Aber ich bin jetzt ein klein wenig verwirrt. Ich erkläre einfach mal, wie ich die Sache verstehe und vielleicht kannst du mir ja sagen, wo mein Denkfehler liegt.
Annahme: Sacred 2 hat tatsächlich ein Memory Leak. Ich selbst habe davon seinerzeit nichts bemerkt und nur, weil S2 sich beim Spielen im Arbeitsspeicher breiter und breiter macht, muss das kein Leak sein (es ist denkbar, dass man den RAM-Verbrauch falsch interpretiert und wenn es dann - aus anderen Gründen - abstürzt, ein Memleak dafür verantwortlich macht). Aber nehmen wir mal an, es hätte tatsächlich eines.
Erstmal zum Speicher. Wie du richtig schreibst, hat ein 32bit-Prozess normalerweise 2GB virtuellen Arbeitsspeicher (auf 64bit-Systemen kann er mit LAA auf 4GB aufgebohrt worden, aber spätestens da ist dann Feierabend). Ein Prozess mit einen Memory Leak würde also immer mehr Speicher anfordern und schließlich vom Betriebssystem keinen mehr bekommen, weil der Adressraum komplett belegt ist. Gute Programme merken das und geben wenigstens eine aussagekräftige Fehlermeldung, schlechte verhalten sich dann undefiniert (aka schmieren ab).
Nun kriegt aber jeder Prozess seine 2GB und wenn ich z.B. die für Windows üblichen 10 oder mehr Hintergrund-Dienste und noch 3 Programme (Shell, Virenscanner und Spiel) laufen habe, brauche ich dann auch 13x2 = 26 GB echten RAM? Nein, natürlich nicht. Windows (wie viele moderne Betriebssysteme) arbeitet nämlich mit virtuellem Speicher. Der ist gar nicht wirklich da, das System tut nur so, als ob. Jeder Prozess kriegt seine 2GB - egal, ob sie wirklich da sind oder nicht. Dieser Adressraum ist dann in handliche Häppchen, so genannte Seiten, eingeteilt und Windows sorgt im Hintergrund automatisch dafür, dass immer dann, wenn ein Prozess auf eine Seite zugreifen will, er sie auch Speicher vorfindet. Wenn es eng wird, schnappt sich das System einfach andere Seiten, die länger nicht mehr benutzt wurden, und parkt die solange auf der Festplatte. Da ist ja Platz. Das ist dann die Auslagerungsdatei von Windows. Wird eine ausgelagerte Seite wieder angefordert, holt das System sie in den Arbeitsspeicher zurück und lagert ggf. eine andere dafür aus. Windows jongliert also im Hintergrund immer mit den Seiten aller laufenden Prozesse herum und sorgt dafür, dass jeder von denen seine 2 GB RAM "sieht", mit denen er einfach so arbeiten kann.
Wenn ich halt nur 2 GB physikalischen RAM habe, dann muss das System (gerade wenn viele und/oder speicherintensive Programme laufen) halt öfter auslagern und wird dann langsamer als wenn z.B. echte 8 GB vorhanden wären. Aber es funktioniert auch und man kriegt keine Probleme, nur weil ein Programm läuft, das aktuell gar nichts macht (das schlummert dann einfach friedlich in der Auslagerungsdatei).
Soweit die Grundlagen, wie ich sie verstehe.
Was ich jetzt nicht verstehe, ist, wie der Memory Cleaner hier helfen soll. Der verkleinert nämlich nicht den allozierten Addressraum (das kann er gar nicht, da er die Anwendungslogik nicht kennt und nicht weiß, welche Teile noch gebraucht werden oder nicht). Er verkleinert vielmehr nur das Working Set. Das Working Set (WS) ist, vereinfacht gesagt, der Teil des Adressraums eines Prozesses, der tatsächlich gerade im physikalisch vorhandenen RAM liegt. Also die Seiten, die gerade nicht ausgelagert sind. Wie verkleinert er das WS? Na indem er Seiten auslagert! Dann sind sie ja nicht mehr im WS. Freigeben kann er sie nämlich nicht, könnte ja was Wichtiges drin stehen.
Was passiert also bei meinem Speicherleck? Die Anwendung fordert mehr und mehr Speicher an. Wenn ich noch volle 2GB im physischen RAM frei habe, dann kriegt sie den auch sofort zugewiesen. Dann ist schließlich der komplette Adressraum voll und es kracht. Habe ich nicht mehr so viel Platz im RAM, wird halt was anderes ausgelagert. Die Anwendung kriegt den Speicher trotzdem, der Adressraum füllt sich und es kracht auch wieder. Dauert nur länger, weil zwischendurch ausgelagert wird.
Wie greift der Cleaner da nun "heilend" ein? Wenn Sacred 2 jetzt ein Speicherleck hat, dann sorgt der Cleaner dafür, dass die Teile des virtuellen Adressraums, die das Spiel belegt hat, aber nicht mehr benutzt, auf die Festplatte ausgelagert werden. Genau das würde Windows aber auch von alleine machen, sobald sich die Notwendigkeit ergibt. Klar, solange keine andere Anwendung den Speicher will, lagert es auch nix aus. Wozu auch? Würde nur unnötig Leistung fressen, wenn das System ohne Not Speicher auf die langsame Platte schaufelt. Mit dem Cleaner habe ich mehr ungenutzten RAM, weil mehr Zeug auf der Platte liegt. Das ist aber auch alles.
Doch die eigentliche Grenze von 2GB (max. Adressraum) ändert sich so oder so nicht. Egal, ob dieser Adressraum nun gerade im RAM oder auf der Platte liegt, sobald er voll ist, kracht's. Eher helfen würde es, sofern noch nicht geschehen, das LAA-Flag zu setzen. Dann kriegt der Prozess nämlich 4GB Adressraum und es dauert entsprechend doppelt so lange, bis es knallt.
Deshalb verstehe ich ehrlich gesagt nicht, wie es funktionieren soll. Ich bezweifle nicht, dass es bei dir geholfen hat (sonst hättest du dir ja kaum die Mühe gemacht, das alles hier so toll zu beschreiben), aber eventuell ist die Erklärung eine ganz andere.
PS: Bei deiner Batch-Datei kannst du ein paar Optimierungen vornehmen. Verzeichnisse kann man mit dem Backslash (\) zusammenschreiben.
Aus:
Code:
cd Spiele
cd "Sacred 2"
cd System
wird also:
Code:
cd "\Spiele\Sacred 2\System"
Das Benutzerverzeichnis kann man übrigens der Variable %userprofile% entnehmen. Somit lässt sich die Datei wie folgt optimieren (modulo Tippfehler):
Code:
c:
cd "%userprofile%\Appdata\Roaming\KoshyJohn\MemClean"
start memclean.exe
d:
cd "\Spiele\Sacred 2\System"
start /wait sacred2.exe
c:
cd "%systemroot%\system32"
taskkill /F /IM memclean.exe
Theoretisch ginge noch mehr, aber dann wird es evtl. für Laien unübersichtlich.
Geändert von foobar (06.08.2012 um 10:28 Uhr)
Grund: Fehlerkorrektur
|
|
|
|
|
|
-
|
 |
|
 |
05.08.2012 19:57
|
#5
|
|
|
|
|
|
|
So ins Detail wollt ich gar nicht gehen. Das Sacred2 ein Leck hat, weiß ich aus eigener Erfahrung und meine anschließende Suche im Netz brachte mir dann eben dann den Hinweis auf ein Leck. Unter anderem auch im offiziellen Sacred2 Forum:
http://forum.sacred2.com/showthread.php?t=64471
Achtung, Englisch.
Wie so ein Tool nun genau funktioniert, habe ich auch keine Ahnung von. Aber das es funktioniert ist zumindest bei mir sicher. Vorher stürzte Sacred2 bei mir regelmäßig ab (habe 16 GB RAM). Nach spätestens zweieinhalb Stunden war Schicht im Schacht. Und es war immer das gleiche:
Absturz beim Aufruf der Weltkarte. Die Suche danach brachte mich dann auch auf die Spur des Lecks, denn der Absturz durch die Weltkarte ist bei Sacred2 ein typisches Merkmal dafür. Ich habe dann meine Auslagerungsdatei auf 24 GB hochgeschraubt, jedoch änderte sich nichts an der möglichen spielbaren Zeitspanne. Egal ob ich sie nun auf nur 2 GB oder eben auf 24GB gesetzt habe, der Zeitraum war immer exakt gleich (Plus/Minus ein paar Minuten).
Zu Deinen Korrekturmöglichkeiten:
Interessanterweise funktionierten bei mir diese Zusammenfassungen nicht. Ich bekam dann immer nur Fehlermeldungen, dass der entsprechende Pfad nicht gefunden wird. Daher griff ich auf die "klobige" Methode zurück.
EDIT:
Ehrlich, ich blicks grad nicht. Ich habe jetzt den Code, den Du gepostet hast, bei mir rein kopiert, und es funktioniert... Eventuell lag es an der Systemvariable, die ich später ergänzt habe? Naja, um so besser für die Anwender. 
EDIT2:
Ach so, ganz vergessen:
Naja, ich hab im Laufe der Zeit gelernt, dass ein Speicherleck nicht bei jeder Konfiguration auftreten muss. Ich selber hab schon einige Spiele gehabt, die ein Speicherleck hatten (haben), was sich bei mir aber niemals gezeigt hat. Während hunderte andere am Jammern waren. *g*
Aus Deiner Signatur schließe ich mal, dass Du Informatiker bist, oder zumindest verdammt viel auf dem Kasten hast. Bestimmt viel mehr als ich. Aber sicher weißt Du dann auch, dass es zig mögliche Konfigs gibt, bei denen etwas auftreten kann, oder auch nicht.
Geändert von Waylinkin (05.08.2012 um 20:06 Uhr)
|
|
|
|
|
|
-
|
 |
|
 |
05.08.2012 21:05
|
#6
|
|
|
|
|
 Metasyntaktische Variable
|
|
 Zitat von Waylinkin
Das Sacred2 ein Leck hat, weiß ich aus eigener Erfahrung und meine anschließende Suche im Netz brachte mir dann eben dann den Hinweis auf ein Leck. Unter anderem auch im offiziellen Sacred2 Forum:
http://forum.sacred2.com/showthread.php?t=64471
Da steht leider nicht, wie der TE zu dem Schluss gekommen ist, dass es ein Speicherleck ist (der User Shorty P beispielsweise bezweifelt es ja auch). Wenn irgendwo ein Entwickler, der den Code kennt, sowas schreibt oder wenn jemand mit hinreichend Ahnung das mit einem Debugger überprüft hat, ok, dann will ich nichts gesagt haben. Ansonsten kann es genauso gut sein, dass da nur eine Spekulation die Runde macht.
Wie so ein Tool nun genau funktioniert, habe ich auch keine Ahnung von.
Es gibt verschiedene Methoden, der Effekt ist halt immer der gleiche: Arbeitsspeicher wird "frei". Was in fast allen Fällen nutzlos ist. Freier Speicher ist ungenutzter Speicher und ungenutzter Speicher ist vergeudeter Speicher. Wenn seinen Speicher nicht benutzen will, kann ihn auch ausbauen. Und dann mir schicken, ich habe Verwendung für ihn. 
Es gibt ein paar ganz exotische Fälle, wo so ein Teil tatsächlich sinnvoll sein kann. Zum Beispiel, wenn man Windows auf einem NUMA-System mit entsprechenden Anwendungen betreibt. Windows (bis einschließlich 7) nimmt nämlich bei der Allozierung keine Rücksicht auf die Besonderheiten dieser Architektur und dann kann man mit so einem Cleaner eine Neuverteilung erzwingen, die weniger Overhead mit sich bringt.
Aber für den normalen Heimanwender gibt es normalerweise keinen Grund, so ein Teil einzusetzen. Jedenfalls aus dem eigentlich "beworbenen" Grund. Und Speicherlecks können die auch nicht heilen. Ich bin mir sicher, auch bei dir hilft es nur "zufällig", aus irgendeinem anderen Grund. Wenn du beispielsweise einen Speicherdefekt hättest, über den S2 dann stolpert, dann kann der Cleaner das natürlich dadurch abschwächen, dass er den Footprint von S2 im RAM verkleinert - weniger Chancen, den Defekt zu treffen. Oder es gibt ein Problem mit irgendeinem Systeminterface, das aber nur auftritt, wenn die betreffende Seite gerade im WS ist. Liegt sie in der Auslagerungsdatei, wird der Fehler maskiert. Solche Geschichten könnte ich mir vorstellen.
Wäre interessant, der Sache mal näher auf den Grund zu gehen, aber das wäre ein Riesenaufwand. Solange es nun bei dir funktioniert, ist die Diskussion darüber also rein akademisch.
Auf jeden Fall viel Spaß in Ancaria und nochmals Danke für deine Anleitung!
Geändert von foobar (05.08.2012 um 21:09 Uhr)
Grund: Fipptehler
|
|
|
|
|
|
-
29.09.2012 17:19
|
#7
|
|
|
|
|
|
|
Bei mir funktioniert diese Vorgehensweise ebenso. Allerdings habe ich das noch nicht lange laufen, melde mich aber nochmal wenn ich es längerfristig so handhabe und es stabil bleibt.
Aber auch wenn es Probleme gibt sende ich ein Feedback.
Vielen Dank an Waylinkin
|
|
|
|
|
|
-
29.09.2012 17:53
|
#8
|
|
|
|
|
|
|
Ich freue mich, wenn Dir das hilft.
Geld regiert die Welt, aber ich regiere MEIN Geld - Ethikbanken. DU kannst das auch.
|
|
|
|
|
|
-
02.10.2012 21:52
|
#9
|
|
|
|
|
|
|
Warum steht denn in der Batch immer ... Konnte den Pfad nicht finden? Spiel startet aber und spielen kann ich auch.
EDIT: Hat sich erledigt
Geändert von Golden Girl (02.10.2012 um 22:32 Uhr)
|
|
|
|
|
|
-
03.10.2012 09:59
|
#10
|
|
|
|
|
|
|
 Zitat von Waylinkin
EDITH sagt mir gerade, dass ich was vergessen habe:
Wer die Batch-Datei im gleichen Verzeichnis liegen hat, wie die sacred2.exe, der kann die Befehle:
Code:
d:
cd Spiele
cd "Sacred 2"
cd System
löschen. Sie sind dann unnötig, denn das Verzeichnis, in dem die Batch-Datei liegt, merkt sich Windows immer. Wer sie drin lässt, macht aber keinen Fehler, der sieht dann eben nur drei Fehlermeldungen, weil Windows versucht, in einen Pfad zu wechseln, in dem es schon ist. Funktionieren tut es trotzdem. 
War es das hier?
Geld regiert die Welt, aber ich regiere MEIN Geld - Ethikbanken. DU kannst das auch.
|
|
|
|
|
|
-
03.10.2012 10:42
|
#11
|
|
|
|
|
|
|
-
31.01.2013 20:28
|
#12
|
|
|
|
|
|
|
Verzeiht bitte, wenn ich diesen Thread hier ausgrabe. Ich habe mir die Batch-Datei erstellt, jedoch habe ich folgende Fehlermeldung auf dem Schirm. Die Verzeichnisse habe ich alle geprüft, die sollten also stimmen. Vertippt habe ich mich auch nicht. Im Anhang habe ich die Batch-Datei sowie ein Screenshot der Fehlermeldung. Vielen Dank vorab für eure Hilfe. 
[Bild: attachment.php?attachmentid=39467&d=1359664071&thumb=1]
Batch-Datei_Sacred2.zip
|
|
|
|
|
|
-
|
 |
|
 |
31.01.2013 20:53
|
#13
|
|
|
|
|
|
|
Warum Verzeihung? Dafür isser doch da. 
In dem Screen ist zu sehen, dass die Batchdatei das Verzeichnis gar nicht wechselt. Sieh, der versucht die MemClean.exe immer noch aus dem Sacred-Verzeichnis zu starten. Das kann natürlich nicht klappen.
Hast Du diesen Arbeitsschritt ausgeführt?
Und das ".com" ist ein Problem. Die Konsole akzeptiert keine Punkte in Verzeichnispfadangaben. Das Problem lässt sich aber einfach beheben: Wir navigieren zum Ordner "KoshyJohn.com" und ändern den Namen ab. Wir löschen einfach den Teil ".com". Wenn ihr jetzt das Tool startet, dann wird eine Frage erscheinen, ob man das Tool noch mal installieren will. Das ist zu bestätigen. Nun wird zwar der ".com" Ordner wieder angelegt, aber der geänderte Ordner existiert weiterhin und jeder Befehl, den wir aussprechen, bezieht sich auf den geänderten Ordner. Das funktioniert bei mir einwandfrei.
Wenn Du das nicht getan hast, kann er das Verzeichnis auch nicht finden, weils nicht existiert. Ich würde auch empfehlen, die verbesserte Dateiversion von foobar zu verwenden. Er kommt mit wesentlich weniger Befehlen aus, was die Fehleranfälligkeit reduziert.
Diese findest auch in diesem Thread, der hat eben doch mehr Ahnung als ich.
Geld regiert die Welt, aber ich regiere MEIN Geld - Ethikbanken. DU kannst das auch.
Geändert von Waylinkin (31.01.2013 um 21:00 Uhr)
|
|
|
|
|
|
-
|
 |
|
 |
03.02.2013 20:22
|
#14
|
|
|
|
|
|
|
 Zitat von Waylinkin
Warum Verzeihung? Dafür isser doch da.
In dem Screen ist zu sehen, dass die Batchdatei das Verzeichnis gar nicht wechselt. Sieh, der versucht die MemClean.exe immer noch aus dem Sacred-Verzeichnis zu starten. Das kann natürlich nicht klappen.
Hast Du diesen Arbeitsschritt ausgeführt?
Ja, diesen Arbeitsschritt habe ich ausgeführt.
 Zitat von Waylinkin
Wenn Du das nicht getan hast, kann er das Verzeichnis auch nicht finden, weils nicht existiert. Ich würde auch empfehlen, die verbesserte Dateiversion von foobar zu verwenden. Er kommt mit wesentlich weniger Befehlen aus, was die Fehleranfälligkeit reduziert.
Diese findest auch in diesem Thread, der hat eben doch mehr Ahnung als ich. 
Ich habe die Batch-Datei nach foobars Muster umgeschrieben. Nun erscheint keine Fehlermeldung mehr, Sacred 2 scheint also zusammen mit dem MemCleaner zu starten. Das können wir abhaken, vielen Dank. Bloß habe ich das Problem wie die ganze Zeit über, dass Sacred 2 ~10 Minuten zum Starten braucht, manchmal klappt es auch gar nicht. Mit der Batch-Datei hat es nichts zu tun, das war bereits vorher schon so. Weißt du mehr darüber?
|
|
|
|
|
|
-
03.02.2013 20:37
|
#15
|
|
|
|
|
|
|
Ob der MemoryCleaner wirklich im Hintergrund läuft, kannst Du sehen, wenn Du während dem Spiel auf den Desktop wechselst. Dort sollte dann in der Taskleiste das Symbol des Cleaners zu sehen sein, und wenn Du S2 schließt, muss es auch wieder verschwinden.
Zu den Startproblemen... Habe ich bisher noch nichts von gehört. Startest Du S2 mit Adminrechten?
Geld regiert die Welt, aber ich regiere MEIN Geld - Ethikbanken. DU kannst das auch.
|
|
|
|
|
|
-
04.02.2013 20:12
|
#16
|
|
|
|
|
|
|
 Zitat von Waylinkin
Ob der MemoryCleaner wirklich im Hintergrund läuft, kannst Du sehen, wenn Du während dem Spiel auf den Desktop wechselst. Dort sollte dann in der Taskleiste das Symbol des Cleaners zu sehen sein, und wenn Du S2 schließt, muss es auch wieder verschwinden.
Zu den Startproblemen... Habe ich bisher noch nichts von gehört. Startest Du S2 mit Adminrechten?
Mit dem Memory Cleaner funktioniert alles, wie es soll. Er startet beim Start von Sacred 2 und beim Beenden des Spiels wird auch der MemCleaner-Task sauber beendet. Mit der Batch-Datei stimmt also alles, ebenso erhalte ich auch keine Fehlermeldung mehr.
Ja, ich habe es bereits mit und ohne Admindrechten gestartet, beide Male mit demselben Ergebnis. Bis auf die nervige Zeitverzögerung läuft das Spiel aber ohne Ruckler oder Abstürze. Wenn das also noch das einzige Manko ist, kann ich damit leben.
|
|
|
|
|
|
-
05.02.2013 13:19
|
#17
|
|
|
|
|
|
|
Geändert von Golden Girl (05.02.2013 um 13:32 Uhr)
|
|
|
|
|
|
-
|
 |
|
 |
06.02.2013 21:19
|
#18
|
|
|
|
|
|
|
 Zitat von GoldenGirl
Das Performance-Problem bekommen wir auch noch in die Reihe [Bild: smilie_girl_307.gif]
Ist ein Problem der Grafikkarte. Sacred 2 mit allem drum und dran, braucht, um die PhysX-Effekte flüssig darzustellen mindestens eine Geforce-Karte ab der 8000er-Serie.
! unbedingt GraKa + Sound Treiber aktualisieren
! Ingame die Grafikdetails etwas runter schrauben
! -skipopenal und -nocpubinding der "sacred2.exe" anhängen
-nocpubinding = Verteilt verschiedene Befehle auf allen verfügbaren CPU-Kernen auf.
Das kann besser/stabiler laufen, muss aber nicht. Hängt von der Betriebssystemversion, der verbauten Hardware und evtl. laufenden Hintergrundprogrammen ab.
So, das ist erstmal das was ich noch vorschlagen kann zu versuchen
EDIT: Vielleicht kann aber foobar noch einiges zu den technischen Details sagen. Ich bin da nicht so ganz firm drin 
Grafik-, Sound- und Chiptreiber sind alle aktuell. Meine Grafikkarte ist eine GTX560Ti, also sollte es mit PhysX theoretisch keine Probleme geben. Die Befehle habe ich im Ziel-Feld bei der Verlinkung zur Batch-Datei eingegeben, jedoch dauert es weiterhin noch so lange, bis Sacred 2 startet. Ich habe es auch mal mit der Verlinkung zur sacred2.exe probiert (ohne Batch), leider mit demselben Ergebnis. Ich bin so langsam ein wenig ratlos.
|
|
|
|
|
|
-
06.02.2013 22:57
|
#19
|
|
|
|
|
|
|
Falls noch nicht gemacht, schalte mal Physx und OpenAL im Spielmenü ab.
Geld regiert die Welt, aber ich regiere MEIN Geld - Ethikbanken. DU kannst das auch.
|
|
|
|
|
|
-
|
 |
|
 |
15.02.2013 18:33
|
#20
|
|
|
|
|
Lehrling
|
|
Hallo ersteinmal in die Runde
Nun hatte ich vorgestern Sacred 2 neu auf die Platte geworfen und mich einwenig schlau gemacht, bin auf Tunngle gestoßen und dachte mir - geil, endlich wieder mit anderen Leuten Sacred 2 spielen. Nun ist mir dasselbe widerfahren wie vielen - Absturz des Spiels nach max. 1 Stunde. Dann erfuhr ich von dem vermeidlichen Speicherleck, dachte mir - ein tool das den speicher leerräumt wäre da, automatisch mit sacred gestartet und geschlossen doch das ideale - boom lande ich hier Welch glückliche Fügung. Nun habe ich es ausprobiert, doch habe einpaar Probleme bei der vermutlich richtigen Umsetzung.
Den Memory Cleaner (mitlerweile v. 180) habe ich installiert. Die batch Datei geschrieben nach dem Vorbild und leicht angepasst, folgend der Code:
Code:
c:
cd "Users\Florian\AppData\Roaming\KoshyJohn\MemClean"
start MemClean.exe
c:
cd "Program Files (x86)\Ascaron Entertainment\Sacred 2 - Fallen Angel\system"
start /wait sacred2.exe
c:
cd "%systemroot%\system32"
taskkill /F /IM memclean.exe
Er startet den Memory Cleaner mit Sacred 2, das ist super. Nun ist mein Spiel jedoch nach ca 1stunde wieder abgestürzt (freeze) und mir ist aufgefallen das der Memory Cleaner dennoch weiterläuft. Da ich zwar die grundlegende Struktur der Kommandokommandos (:P) kenne, aber die zeile in der der Prozess gegrillt werden soll zu hoch ist, weiss ich nicht ob ich da etwas falsch gemacht habe oder es an etwas anderem liegt.
Auch habe ich mir, nachdem es ja scheinbar nicht funktioniert hat, nocheinmal das tool memcleaner angeschaut und unter options nachgesehen. Wäre es hier nicht auch sinnvoll die Option Clear system cache every 5minutes zu aktivieren? Ich werde es damit einmal probieren, vielleicht klappt es ja dann.
Freue mich über Antworten 
Danke nochmals für den wirklich tollen und ausführlichen Thread!
|
|
|
|
|
|
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
|
|