Benötige Tipp zur Zwischenspeicherung von Daten (bis zu 100MB) [gelöst]
-
Hallo,
ich programmiere gerade ein n-Damen Programm für die Schule.
Dieses soll enthalten dass die Zeit gemessen wird, wie lange das programm benötigt um dieses Problem zu lösen.
Zur Zeit gebe ich die bisher gefundenen Lösungen in einer ListBox aus. Aber wenn man nun für die Brettgröße n=14 eingibt, muss das Programm 365000 Lösungen berechnen. Dabei wird die ListBox verdammt voll und bremst das ganze Programm aus.Meine Frage: Fällt jemanden eine gute Möglichkeit zur Zwischenspeicherung der Lösungen ein, dass meine Rechenzeit nicht durch die Ausgabe in der ListBox verfälscht wird.
gruß Pat
-
Evtl. helfen dir TStrings::BeginUpdate() und TStrings::EndUpdate(). Allerdings wird dann erst nach Beendigung des Hinzufügens auch die Anzeige aktualiesiert.
-
Leider hilft das nichts.

Aber trotzdem Danke.
Wäre es vielleicht sinnvoll extra für die Ausgabe in der ListBox einen Thread zu benutzen? Leider habe ich noch keine Erfahrung damit...
Aber irgendwie ist das so wie mit den Kanonen und den Spatzen...
-
Hallo
nimm als Liste während der Berechnug erstmal eine TStringList, und nach dem Berechnen kopierst du die StringList in die ListBox.
TStringList *StringList = new TStringList(); ... // Berechnung durchführen und StringList füllen TListBox->Items->Assign(StringList); delete StringList;bis bald
akari
-
Vielen Dank an akari.
Funktioniert wunderbar.
Nur dauert jetzt nartürlich die Ausgabe nach dem Berechnen ziehmlich lange.Ich will euch ja nicht auf die Nerven gehen, aber kennt keiner eine Möglichkeit die Ausgabe parallel zur Berechnung laufen zu lassen ohne diese extrem auszubremsen? Dass es sich nicht komplett verhindern lässt ist mir schon bewusst.
Aber es muss doch eine andere Möglichkeit geben als den Benutzer 6 Minuten warten zu lassen bis die ListBox gefüllt ist.Mein eigener Gedanke ist ja einen Thread zur Ausgabe paralell zur Berechnung laufen zu lassen. Ist das sinnvoll?
Danke für die Mühe.
Gruß Pat
-
Hallo
also wenn das hinzufügen wirklich 6min dauert, ist eine komplette Ansicht einfach nicht das Richtige. Du läßt das Ergebnis der Berechnung erstmal in der StringList, (speucherst die vielleicht auch erstmal in einer Datei) und zeigts in der ListBox immer nur einen vertretbaren Teil an, also 100 oder 1000 Zeilen. Zusätzlich machst du noch eine Anzeige, wie viele Teile des Ergebnisses es im Gesamt gibt, welcher Teil angezeigt wird und ein paar Buttons, um zwischen den Teilen zu wechseln.
Dann mußt du die StringList natürlich als Member des entsprechenden Forms deklarieren und das delete in den Destruktor verlegen.bis bald
akari
-
Vielen Danke.
So habe ich es mir vorgestellt.