<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao compagni JMP. Ho pensato di condividere con te la mia storia di miglioramento delle prestazioni JSL. Se stai usando WORD per analizzare stringhe molto lunghe (> 200.000 caratteri), questo ti aiuterà.
Stavo avendo alcuni problemi di prestazioni in JSL. L'ho tracciato per rallentare le prestazioni della funzione PAROLE per stringhe veramente lunghe. La funzione WORDS analizza una stringa in una lista utilizzando uno spazio o un delimitatore fornito. Normalmente questa funzione è abbastanza veloce, ma inizia a rallentare per stringhe di circa 200.000 caratteri. Sì, ho delle stringhe così lunghe e lunghe. Ecco un grafico delle prestazioni:

Così ho scritto una trappola per topi migliore. In effetti ho scritto due trappole per topi, come puoi vedere dal grafico. Il primo (MYWORDS1) utilizza OPEN per aprire una stringa di testo in un set di dati. Il secondo (MYWORDS2) taglia i dati in chunk approssimativi da 100.000 byte e esegue le WORD sui blocchi. Entrambi hanno prestazioni eccellenti rispetto a WORD, con il numero di caratteri più alto.
Sebbene la funzione MYWORDS1 sia leggermente migliore, presenta problemi se il testo ha ritorni a capo e feed di riga, quindi probabilmente utilizzerò MYWORDS2 per l'utilizzo di produzione.
La tecnica utilizzata in MYWORDS1 ha molte possibilità! Grazie a Peter Wiebe per l'idea originale di usare OPEN e per rivedere e migliorare il mio codice. Ecco un breve esempio che mostra come aprire una stringa di testo in un set di dati, analizzando ciascuna stringa delimitata in una riga separata:
big_string = "Questa è una stringa di esempio delimitata da spazi" ;
tmpdt = Aperto ( char a blob ( "WordColumn" || "" || big_string ) , testo ,
endofline ( altro ) , eolother ( "" ) , endoffield ( linguetta ) , invisibile ) ;
BTW questi risultati sono stati con JMP 9.0.2 su una macchina XP a 32 bit con 3 GB di ram e un processore CPU 2,50GHz i5-2520M. Ho testato le funzioni in Windows 7 utilizzando JMP 9 e JMP 10 beta, e i risultati erano comparabili.
Ho allegato il codice per le funzioni e alcuni codici di test.
Godere!
Peter