<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />In Datenbank speichern ist zu langsam (10.000 Datensätze pro Minute) hat eine Antwort von mscharf das erinnerte mich an eine Leistungsverbesserung, die für JMP 13 geplant war. (Danke Jeff Polzin!)
Msharp erwähnt, dass die Datenbankaktualisierungsfunktion schneller als andere Techniken ist, aber immer noch nicht großartig.(Und sehen bryan.boone Beantworten Sie auch die ursprüngliche Frage ... eine weitere JMP 13-Leistungsverbesserung.) Ich habe mir das Skript angesehen (das eine clevere Methode zur Verwendung von JSL und SQL ist) und gesehen, dass es Elemente am Ende einer Liste hinzufügt, etwa so:
// vorwärts bauen
forwardList = {};
Startzeit = Tick Sekunden ();
Für( i = 0, i < 30000, i++,
Einfügen in ( forwardList, i )
);
stoptime = Tick Sekunden ();
Show( Stoppzeit - Startzeit );
Stoppzeit - Startzeit = 1,68333333334886; // JMP 12-Zeit
das ist wirklich langsam in JMP 12 und früher.Die Liste wird intern von ihrem ersten Element gehalten, und das letzte Element muss entdeckt werden, indem die Länge der Liste durchlaufen wird.InsertInto() fügt standardmäßig am Ende der Liste hinzu. Das führt zu einer Leistung von N^2: Verdoppeln der Länge der Liste vervierfacht die Zeit.Es gibt eine Möglichkeit, dies zu vermeiden:
// Rückwärts bauen
reverseList = {};
Startzeit = Tick Sekunden ();
Für( i = 0, i < 30000, i++,
Einfügen in( reverseList, i, 1 )
);
reverseList = Reverse( reverseList );
stoptime = Tick Sekunden ();
Show( Stoppzeit - Startzeit );
Stoppzeit - Startzeit = 0,0333333334419876;
das ist besser.Die Funktion insertinto() wird mit einem dritten Argument von 1 aufgerufen, um am Anfang der Liste einzufügen.Beachten Sie, dass der Aufruf der Funktion reverse() auch in der gemeldeten Zeit berücksichtigt wird.Und die Antwort ist dieselbe:
show( reverseList == forwardList);
reverseList == forwardList = 1; // gut, so oder so dieselbe Antwort
Freuen Sie sich auf JMP 13?Hier ist es:
// vorwärts bauen
forwardList = {};
Startzeit = Tick Sekunden ();
Für( i = 0, i < 30000, i++,
Einfügen in ( forwardList, i )
);
stoptime = Tick Sekunden ();
Show( Stoppzeit - Startzeit );
Stoppzeit - Startzeit = 0,0166666668374091; // Jeff ist unglaublich!
Um es kurz zu machen: Wenn Sie ein JMP 12-Skript haben, das eine Liste mit mehr als 100 Elementen erstellt, fügen Sie es vorne ein und kehren Sie es dann um.JMP 13 wird so oder so schnell sein.