|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Copie de tableaux de structures ou classes |
Débuté par Nicolas Magnien, 12 juin 2018 17:07 - 6 réponses |
| |
| | | |
|
| |
Membre enregistré 63 messages Popularité : +4 (4 votes) |
|
Posté le 12 juin 2018 - 17:07 |
Bonjour a tous
Dans le cadre d'un logiciel en multithread je souhaite effectuer des copies de tableaux de classes pour repartir les traitements sur plusieurs thread... J'ai fait plusieurs tests voilou les resultats: 1----------------------- //11ms tableaucopie(TAB_VAR,TAB_VAR1)
2----------------------- //40ms POUR i=1 _a_ NB TAB_VAR1[i]=TAB_VAR[i] FIN
3----------------------- //65ms POUR i=1 _A_ NB TAB_VAR1[i]:Inc=TAB_VAR[i]:Inc TAB_VAR1[i]:cVal=TAB_VAR[i]:cVal FIN
4----------------------- //12ms TAB_VAR1<=TAB_VAR
5----------------------- //17000ms Monbuff est buffer serialise(TAB_VAR,Monbuff,psdBinaire) deserialise(TAB_VAR1,Monbuff,psdBinaire)
6----------------------- //2ms!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Transfert(&TAB_VAR1,&TAB_VAR,TableauInfo(TAB_VAR,tiTailleTotale))
Ma question donc!!! vu la performance du test 6!!! A t on le droit de faire ca sur un tableau????(je pense pas!!!) comment le windev organise t il sa mémoire pour les tableaux... (tout à la suite??, pointeurs uniquement?...) Pour info le 6 fonctionne j'ai bien les éléments copiés dans l'autre tableau... mais le test plante à la fermeture du logiciel (APPCrash!!!)
Alors la si qqn me répond!!! la classe!!!
-- Nicolas Magnien oXalis [Supervision Industrielle - Procédés Batch - ERP - MES] www.decobecq-automatismes.fr
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 32 messages |
|
Posté le 12 juin 2018 - 17:25 |
Bonjour,
Pour le 6, est-ce que tu t'es assuré que la taille du tableau destination était au moins la même que la tableau source. Il se pourrait que la copie se fasse mais du coup déborde du tableau et écrase des données en mémoire et cela expliquerait le "appcrash" à la fermeture de l'application. A+ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 940 messages Popularité : +66 (68 votes) |
|
Posté le 12 juin 2018 - 17:30 |
bonjour,
comme là indiqué Lolo83, il faut allouer de la mémoire pour votre tableau destination, du genre :
Dimension(_my_tab_dest,TableauInfo(_my_tab_source,tiNombreTotal)) Transfert(&_my_tab_dest,&_my_tab_source,TableauInfo(_my_tab_source,tiTailleTotale))
mais je pense que vous devriez obtenir les mêmes temps de réponses que la fonction WD TableauCopie()
bon dèv |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 63 messages Popularité : +4 (4 votes) |
|
Posté le 15 juin 2018 - 14:06 |
Bonjour
Merci pour vos réponses... Les 2 tableaux sont bien évidemment de taille (et de type) identique je ne l'avais pas précisé.... Je ne pense pas que "transfert" fonctionne pour cela. cette fonction doit copier une zone mémoire continue... les tableaux de classes ne doivent certainement pas êtres dans une zone continue... >> danger...
Merci encore...
-- Nicolas Magnien oXalis [Supervision Industrielle - Procédés Batch - ERP - MES] www.decobecq-automatismes.fr
|
| |
| |
| | | |
|
| | |
| |
Posté le 15 juin 2018 - 16:30 |
Bonjour
Qq soit le temps de réponse entre l'une et l'autre méthode ( sauf la 6 de toute façon qui ne fonctionne jamais complètement pour copier des classes ) les copies directes amènent toujours un bon lot de surprise
le cas d'école :
Ex objet 1 qui a un membre objet dynamique qui référence une classe allouée dans une méthode et détruite au destructeur Copie de l'objet 1 vers objet 2, l'objet 2 qui est détruit avant le 1, l'objet dynamique référencé par l'objet 1 est déduit dans le destructeur de la 2 : crash
L'utilisation d'une méthode Copy() dans tous els objets est indispensable pour éviter ce genre de surprise … Alors tu vas me répondre, non j'utilise pas d'objet dynamique mais le jour où tu ( ou qq d'autre ) va en utiliser un il va pas spécialement penser à la copie et le résultat sera le même, tandis qu'une méthode copy on sait a quoi elle sert et on peut y commenter le pourquoi du comment
Bon Dev
Marc Fastré www.marc-fastre.be |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 63 messages Popularité : +4 (4 votes) |
|
Posté le 18 juin 2018 - 09:57 |
Bonjour Marc Tu as bien raison!!! Il faut absolument comprendre le fonctionnement en background... sinon... Ce genre d'information est parfois difficile à trouver... c'est dommage... Bon dev...
-- Nicolas Magnien oXalis [Supervision Industrielle - Procédés Batch - ERP - MES] www.decobecq-automatismes.fr
|
| |
| |
| | | |
|
| | |
| |
Posté le 18 juin 2018 - 10:23 |
Bonjour Nicolas
Donc c'est le méthode 3 que tu dois utiliser, mais encapsulée dans une méthode Copy par laquelle tu passe l'objet de destination en paramètre
Ce n'est pas la plus rapide mais bon, ce n'est jamais dans ce genre de code qui va plomber les performances
Bon Dev
Marc Fastré www.marc-fastre.be |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|