Krikroff Posté(e) le 14 janvier 2014 Signaler Posté(e) le 14 janvier 2014 Suite à un besoin particulier je voulais m'assurer de la taille maximale d'une variable globale afin de persister des informations de type chaînes de caractères si vous souhaitez faire l’expérience vous même, il faut créer une variable globale, ici: varMaxLength, puis dans un périphérique virtuel ajouter le code suivant dans un bouton for i=1, 250 do fibaro:setGlobal("varMaxLength", fibaro:getGlobalValue("varMaxLength").."0"); fibaro:debug("global variable length is now "..string.len(fibaro:getGlobalValue("varMaxLength"))); end pour remettre la variable à zero, dans un autre bouton le code suivante: fibaro:setGlobal("varMaxLength", ""); 228 est donc la taille maximale d'une chaîne dans une variable globale
Steven Posté(e) le 12 août 2014 Signaler Posté(e) le 12 août 2014 Je me posais la question et comme un gros flemmard, j'ai pas testé ... 228 ... c'est pas énorme
Krikroff Posté(e) le 12 août 2014 Auteur Signaler Posté(e) le 12 août 2014 Oui c'est pas énorme c'est pour cela qu'il me semblait important d'en parler car c'est l'unique moyen ànotre disposition pour persister des infos et les partager entre divers codes... 1
Lazer Posté(e) le 13 décembre 2015 Signaler Posté(e) le 13 décembre 2015 Déterrage de sujet.... J'essaie de déterminer le nombre max de caractères dans une Variable Globale en v4.061 beta fibaro:setGlobal("varMaxLength", "") for i=1, 1000 do local texte = string.rep('0', i*10) fibaro:debug(i.." - global variable length is now "..string.len(texte)) fibaro:setGlobal("varMaxLength", texte) end Lorsque i=817, donc la variable fait 8170 caractères de long, l'affichage s'arrête brusquement. En mettant des traces partout, c'est l'instruction setGlobal() qui crashe. Sous Linux, un core dump apparait. Ce qui m'étonne, c'est que @tcheri affirme dans ce topic que Steven a pu monter à 40'000 caractères. Vous pouvez tester et me dire ce que vous en pensez ? Steven, tu as une autre méthode pour tester la longueur d'une VG ? Ou alors c'est une régression dans les v4 récentes.... ce ne serait pas la première fois !
Steven Posté(e) le 14 décembre 2015 Signaler Posté(e) le 14 décembre 2015 De mémoire je n'avais pas insérer de String mais du JSON vide. Je prenais un json vide que j'ajoutais à un autre json puis sauver dans une VG et ainsi de suite jusqu'à la rupture. Le json étant composé de caractères {[]}, j'arrivais à plus de 40'000 caractères avant que le système soit trop lent et que j'arrète le tout. Par contre sur les dernières version, il y a un controle de "Out of memory" qui risque d'exploser les tests.
Steven Posté(e) le 14 décembre 2015 Signaler Posté(e) le 14 décembre 2015 Perso leur contrôle est vraiment merdique car j'ai quelques scènes qui fonctionne très bien mais consomme un peu de mémoire toutes les 5 mn qui sont complètement bloquée par leur contrôle de m.... En bref, on paie cher, très CHER pour du LUA mais on nous bride complètement. 2
Krikroff Posté(e) le 14 décembre 2015 Auteur Signaler Posté(e) le 14 décembre 2015 La bonne pratique pour persister des infos dans une VG est de créer une table puis d' enregistrer le résultat d'un json.encode sur cette table. C'est ce que j'utilise depuis 2 ans et ça marche très bien J'espère juste que Fibaro ne décide pas de limiter ça aussi, ils ont bien limité la taille des mainloops dans les VD @Steven, Out of memory punaise je ne l'avais pas encore vu celui-la, tu es trop fort
Steven Posté(e) le 14 décembre 2015 Signaler Posté(e) le 14 décembre 2015 Après analyse, c'est pas mon script .. c'est la box qui est d'elle même à 99% et dès que mon script s'execute, elle me fait un Out of memory sur mes scripts ... en redémarrant la box, tout redevient à la normal ... Pffftttt ... elle m'a fait peur. Elle a du atteindre les 99% lors que j'ai balancé un test (pourri) 1
mprinfo Posté(e) le 14 décembre 2015 Signaler Posté(e) le 14 décembre 2015 Moi le out of memory me fais penser àmon vieux commodore 64 et ces 64ko. C'était une erreur classique sur ce type d'ordinateur. @steven il va falloir ajouter 2go de ram Enfin moi je suis pas pour car pour moi 1go devrait suffire largement. Et je ne comprend pas pourquoi la box plante des qu elle utilise le swap Envoyé de mon SM-G900F en utilisant Tapatalk
pepite Posté(e) le 14 décembre 2015 Signaler Posté(e) le 14 décembre 2015 Ca c'est du vrai test messieurs ;-) merci pour les infos les experts
Lazer Posté(e) le 14 décembre 2015 Signaler Posté(e) le 14 décembre 2015 Merci Steven et JC Bon justement ça tombe bien, car c'est du JSON que je veux mettre dans la variable globale. J'ai donc une table, et j'utilise json.encore pour écrire dans la VG. Mais j'ai toujours le plantage dès que je dépasse 8000 et quelques caractères : fibaro:setGlobal("varMaxLength", "") local data = {id=0, timestamp="NULL", type="temperature", value=10} fibaro:debug("data length = "..string.len(json.encode(data))) local datas = {} for i=1, 1000 do datas[i] = data local payload = json.encode(datas) fibaro:debug(i.." - global variable length is now "..string.len(payload)) fibaro:setGlobal("varMaxLength", payload) end Ce qui donne le debug : [DEBUG] 21:39:33: data length = 59 [DEBUG] 21:39:33: 1 - global variable length is now 61 [DEBUG] 21:39:33: 2 - global variable length is now 121 [DEBUG] 21:39:33: 3 - global variable length is now 181 [DEBUG] 21:39:33: 4 - global variable length is now 241 [DEBUG] 21:39:33: 5 - global variable length is now 301 ... [DEBUG] 21:39:33: 136 - global variable length is now 8161 [DEBUG] 21:39:33: 137 - global variable length is now 8221 et pouf, plus rien En même temps c'est logique, dès lors qu'on fait un json.encode, la table devient une simple chaine de caractères. Ou alors j'ai pas compris la technique à employer ? J'ai bien essayer d'envoyer le json directement dans la fonction setGlobal(), mais bien sur il ne veut pas, il me dit qu'il veut un string et pas une table. PS : tout ça dans un bouton de VD (et non pas une scène)
Lazer Posté(e) le 9 juin 2019 Signaler Posté(e) le 9 juin 2019 Maxi déterrage de topic Je viens de refaire tourner le petit script donné dans mon post juste au-dessus (il y a 3 ans et demi donc...) dans un bouton de VD. Je suis en V4.540 Et le script est allé au bout des 1000 itérations ! Cela a pris 3 minutes et 39 secondes (quand même !) et ma variable globale a donc dépassé 60 ko [DEBUG] 17:12:31: 1000 - global variable length is now 60001 C'est donc très intéressant, Fibaro a donc repoussé cette limite... (ça devait faire partie des "other minor bugfixes" ) Je ne sais pas à combien elle se situe maintenant, il faudrait faire des tests complémentaires, mais on peut maintenant stocker un nombre plus conséquent de données dans une VG en vue d'un traitement ultérieur. Bon après faut relativiser, 60 ko..... on va peut être pouvoir atteindre les 640 Ko du DOS des années 80 2
pepite Posté(e) le 9 juin 2019 Signaler Posté(e) le 9 juin 2019 Other minor fixes Trop fort !!Envoyé de mon BND-L21 en utilisant Tapatalk
mprinfo Posté(e) le 10 juin 2019 Signaler Posté(e) le 10 juin 2019 Punaise 4ko de. Plus et on aurait un commodore 64 aller Fibaro un petit effort Envoyé de mon BLA-L29 en utilisant Tapatalk
Messages recommandés