<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour chers collègues. Je pensais partager avec vous mon histoire d’amélioration de la performance JSL. Si vous utilisez WORDS pour analyser de très longues chaînes (> 200 000 caractères), cela vous aidera.
J'avais des problèmes de performance dans JSL. Je l'ai tracé pour ralentir les performances de la fonction WORDS pour de très longues chaînes. La fonction WORDS analyse une chaîne dans une liste en utilisant un espace ou un délimiteur fourni. Normalement, cette fonction est assez rapide, mais elle commence à ralentir pour des chaînes d'environ 200 000 caractères. Oui, j'ai des chaînes qui sont aussi longues que longues. Voici un graphique de performance:

J'ai donc écrit un meilleur piège à souris. En fait, j'ai écrit deux pièges à souris, comme vous pouvez le constater sur le graphique. Le premier (MYWORDS1) utilise OPEN pour ouvrir une chaîne de texte dans un jeu de données. Le second (MYWORDS2) divise les données en fragments d'environ 100 000 octets et exécute le mot WORDS sur les morceaux. Les deux ont d'excellentes performances par rapport à WORDS, avec un nombre de caractères plus élevé.
Bien que la fonction MYWORDS1 soit légèrement meilleure, elle a des problèmes si le texte contient des retours à la ligne et des sauts de ligne. Je vais donc probablement utiliser MYWORDS2 pour un usage en production.
La technique utilisée dans MYWORDS1 offre de nombreuses possibilités! Merci à Peter Wiebe pour l'idée originale d'utiliser OPEN, ainsi que pour avoir revu et amélioré mon code. Voici un court exemple montrant comment ouvrir une chaîne de texte dans un ensemble de données, en analysant chaque chaîne délimitée dans une ligne distincte:
big_string = "Ceci est un exemple de chaîne délimitée par des espaces" ;
tmpdt = ouvrir ( char à blob ( "WordColumn" || "" || big_string ) , texte ,
fin de ligne ( autre ) , eolother ( "" ) , fin de champ ( languette ) , invisible ) ;
BTW ces résultats étaient avec JMP 9.0.2 sur une machine 32 bits XP avec 3 Go de RAM et un processeur i5-2520M CPU 2.50GHz. J'ai testé les fonctions sous Windows 7 avec JMP 9 et JMP 10 bêta, et les résultats étaient comparables.
J'ai joint le code pour les fonctions et du code de test.
Prendre plaisir!
Peter