Hallo JMP-Community,
Ich habe kürzlich versucht, die Leistung meiner internen JSL-Skripte zu verbessern und bin auf die folgenden Leistungsprobleme gestoßen, die ich gerne beheben würde.
Nehmen wir das folgende Skript (JMP 17.2 PRO läuft unter macOS):
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
values = Column( dt, 1 )[dt << get rows where( Excluded( Row State() ) != 1 )];
new window("test",
lb = list box( values, nlines(10), width(100), ),
b = button box("reset", reset_lb),
);
reset_lb = expr(
lb << remove all();
lb << append(values);
Nnames = N Items(values);
for(i = 1, i <= Nnames, i++,
lb << set selected(i);
);
);In einigen meiner Skripte verwende ich Listenfelder, die dynamisch aktualisiert werden. Um den Inhalt der Listenfelder zu ändern, verwende ich die Funktionen << remove() und << append(). Sie funktionieren einwandfrei, aber ich befürchte, dass diese Methode nicht sehr gut mit der Anzahl der Zeilen skaliert. Ein weiterer Teil, der überraschend langsam läuft, ist die For-Schleife mit << set selected(). Anscheinend ist dies die einzige Methode, die ich zum Auswählen aller Elemente in einem Listenfeld finden konnte, aber sie skaliert schrecklich mit der Anzahl der Zeilen.
Meine Frage ist, ob es eine bewährte Methode gibt, den Inhalt der Listenfelder zu aktualisieren, ohne dass die Leistung dadurch beeinträchtigt wird. Ich suche nach möglichen Alternativen, die Folgendes tun könnten:
- optimale Methode zum Festlegen des Inhalts des Listenfelds.
- schnelle Möglichkeit, alle Elemente des Listenfelds auszuwählen.
Wir sind für jedes Feedback und jeden Vorschlag sehr dankbar.