Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ein NLT-Veteran spielt Drakensang
Den Zwölfen zum Gruße!

(25.04.2012, 21:49)Kunar schrieb: Wer sagt denn, dass die Spielstände besonders platzsparend angelegt sind? Gerade bei Datenbanken kann es passieren, dass Speicher nicht wieder freigegeben wird, selbst wenn Datensätze gelöscht werden. Eine kurze Recherche per Google ergab, dass es für SQLite einen Befehl namens "vacuum" gibt. (Man findet zahlreiche Beispiel dafür, wie man derzeit verwendete Firefox-Versionen beschleunigt, weil diese ebenfalls SQLite-Datenbanken einsetzen...) Und so geht's (Windows):

Von www.sqlite.org/download.html die sqlite3.exe holen ("Binary"). Diese in ein Verzeichnis mit dem Spielstand kopieren. (Vorher natürlich eine Sicherheitskopie des Spielstands machen - wir sind ja keine Anfänger!) Den Spielstand in irgendetwas umbenennen, was vorne 8 Zeichen hat (alte MS-DOS-Beschränkung). Dann auf Kommandozeilenebene wechseln und dort sqlite3 <Name des Spielstands> vacuum eingeben. Man kann außerdem dasselbe mit dem Befehl reindex machen, der die Indizes der Datenbank neu aufbaut.

Ergebnis bei mir (nur vacuum):
vorher 65.528 KB / 67.100.672 Byte
nachher 64.164 KB / 65.703.936 Byte

Und siehe da - der Kampf stürzt nicht mehr ab! Ich muss jetzt noch testen, ob das auch so anhält. Wenn es wirklich die magische Grenze von 64 MB war, habe ich die bald wieder erreicht.

Übrigens hat auch der SQLite-Browser eine Funktion, um Datenbanken zu komprimieren. Man braucht also nicht unbedingt die sqlite3.exe, um die Spielstände kleiner zu machen.

(29.04.2012, 21:35)Kunar schrieb: Beachtlich ist, dass Dein Spielstand nur 28 MB groß ist - also nicht einmal die Hälfte von der 64-MB-Grenze. Entweder gibt es also noch eine viel zu große Tabelle bei mir (oder einen zu großen Index) oder es ist irgendwie anders Speicher verloren gegangen. Ich werde das genauer erforschen, am besten zuerst über die Anzahl der Datensätze pro Tabelle.

Glücklicherweise kann man mehrere Instanzen des SQLite-Browsers gleichzeitig aufmachen, wie ich erst jetzt festgestellt habe. Damit konnte ich zunächst feststellen, dass es nicht die Anzahl der im Spiel befindlichen Gegenstände ist, die den Spielstand so groß macht. Denn die Zahlen aus den betreffenden Tabellen weichen zwischen dem Spielstand von mir und dem von Crystal nicht so stark ab, dass sie diesen krassen Unterschied in der Größe der Spielstände erklären würden. Ich muss mir also nicht überlegen, irgendetwas zwangsweise zu verkaufen, zu verarbeiten oder gar wegzuwerfen.

(Ohnehin hatte ich bereits früher festgestellt, dass es diesbezüglich nichts bringt, Gegenstände zu verkaufen oder wegzuwerfen. Inventare von Händlern aus geschlossenen Gebieten bleiben komplett im Spielstand. Das Inventar der Händler Floris und Calandor Cupinez wird nach dem Abschluss der Queste "Das Auge des Drachen" zurückgesetzt bzw. erweitert. Alle Gegenstände, die man ihnen verkauft hat, bleiben jedoch im Spielstand und haben nach wie vor die Angabe, wo sie verkauft worden sind, also Ugdanhafen oder Grafenstadt. Wirft man Gegenstände weg, erhalten sie die Angabe "_graveyard", werden aber ebenfalls nicht aus dem Spielstand entfernt. Wenn überhaupt, muss man also knallhart Datensätze aus der Datenbank löschen und diese dann komprimieren.)

(27.04.2012, 23:06)Kunar schrieb: Leider kam bei der 3. Welle Goblins wieder ein Absturz. Ein erneutes Bereinigen brachte nur kurzzeitig Erleichterung. Aber ich habe noch einen weiteren kleinen Knüller auf Lager:
(...)
In den Spielständen fand ich eine Tabelle namens _Instance_ActionDummy mit über 3000 Einträgen. Anhand der Ortsangaben konnte ich ermitteln, dass hier die gesamte Spielhistorie bezüglich Aufenthaltsorte pro Speichern festgehalten wurde. Bisher ersichtlicher Nutzen gleich 0. Nachdem ich die Tabelle (ausgenommen den aktuellsten Datensatz) komplett geleert hatte, konnte ich den Kampf weiterführen.

Allerdings habe ich erneut nur etwa 1 MB gewonnen. 64 MB scheint wirklich die magische Grenze zu sein. (...)
Der nächste Schritt wird darin bestehen, den verbrauchten Speicherplatz je Tabelle herauszufinden. Irgendwie müssen die 64 MB ja zusammenkommen.

Der Vergleich der beiden Spielstände ergab drei große Unterschiede: Zum einen war das die o.g. Tabelle, die bei mir 3001 Datensätze enthielt, bei Crystal 237. Zweitens ist das die Tabelle _ProbeTable, die bei mir 1520 Datensätze enthielt, bei Crystal 295. Aber der wirklich große Brocken ist bei mir die Tabelle _Instance_EffectBox, die bei mir 152.879 Datensätze enthält (und damit mehr als alle anderen Tabellen der Datenbank zusammen - locker geschätzt sogar mehr als ein Vielfaches!), bei Crystal hingegen 17.569, also eine Dezimalstelle weniger. Damit sind drei Speicherfresser identifiziert! Mal sehen, wie die drei Tabellen bei einem neuen Spiel aussehen. Das dürfte Aufschluss geben über wirklich benötigte Datensätze.
Ärger im Svellttal? Auf der Suche nach dem Salamanderstein? Dann hilft der Sternenschweif-Reiseführer von Kunar!
Zitieren


Nachrichten in diesem Thema
Ein NLT-Veteran spielt Drakensang - von Kunar - 06.12.2010, 23:55
RE: Ein NLT-Veteran spielt Drakensang - von exi - 08.12.2010, 05:51
RE: Ein NLT-Veteran spielt Drakensang - von exi - 09.12.2010, 16:25
RE: Ein NLT-Veteran spielt Drakensang - von exi - 09.12.2010, 17:04
RE: Ein NLT-Veteran spielt Drakensang - von exi - 10.12.2010, 13:17
RE: Ein NLT-Veteran spielt Drakensang - von exi - 13.12.2010, 00:54
RE: Ein NLT-Veteran spielt Drakensang - von exi - 16.12.2010, 06:49
RE: Ein NLT-Veteran spielt Drakensang - von exi - 20.12.2010, 00:57
RE: Ein NLT-Veteran spielt Drakensang - von exi - 05.05.2011, 14:38
RE: Ein NLT-Veteran spielt Drakensang - von exi - 08.05.2011, 22:45
RE: Ein NLT-Veteran spielt Drakensang - von exi - 08.05.2011, 23:26
RE: Ein NLT-Veteran spielt Drakensang - von exi - 09.05.2011, 02:08
RE: Ein NLT-Veteran spielt Drakensang - von exi - 10.05.2011, 02:01
RE: Ein NLT-Veteran spielt Drakensang - von exi - 13.05.2011, 13:48
RE: Ein NLT-Veteran spielt Drakensang - von exi - 31.05.2011, 00:21
RE: Ein NLT-Veteran spielt Drakensang - von exi - 16.11.2011, 02:53
RE: Ein NLT-Veteran spielt Drakensang - von exi - 16.11.2011, 15:17
RE: Ein NLT-Veteran spielt Drakensang - von exi - 28.11.2011, 03:14
RE: Ein NLT-Veteran spielt Drakensang - von exi - 01.06.2011, 13:55
RE: Ein NLT-Veteran spielt Drakensang - von exi - 24.04.2012, 18:37
RE: Ein NLT-Veteran spielt Drakensang - von exi - 24.04.2012, 23:05
RE: Ein NLT-Veteran spielt Drakensang - von Kunar - 29.04.2012, 23:14
RE: Ein NLT-Veteran spielt Drakensang - von cvk - 30.04.2012, 09:39
RE: Ein NLT-Veteran spielt Drakensang - von cvk - 26.04.2012, 22:05
RE: Ein NLT-Veteran spielt Drakensang - von Kritty - 02.03.2015, 22:50



Benutzer, die gerade dieses Thema anschauen: 9 Gast/Gäste