Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
kungfu-sheep Anomalie floodiforme
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
|
Posté le: 10/09/11 14:11 Sujet du message: |
|
|
Vladadamm a écrit: | Tirlititi a écrit: | Petite particularité GUI : la force "(All Players)" est une constante | Donc cela ne sert à rien que je set une var "All Players", car ça ne changera rien ^^ (c'était au cas où mon trigger de gold pouvait causer du leak [6000fois en 1heure de jeu]) |
6000/4 294 967 296
t'as encore de la marge mec de toute façon xD _________________
|
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 15/09/11 16:23 Sujet du message: |
|
|
fulldragon a écrit: | techniquement, chaque variable génère du leak. Mais les variables de types primitives ne peuvent être supprimés contrairement aux autres.
donc ton groupe unit génère du leak, mais il est removable (si j'ai bien suivi le tuto source des citations) |
Les données de type primitif sont allouées sur la pile et ne pose donc aucun problème. _________________
|
|
Revenir en haut |
|
|
kungfu-sheep Anomalie floodiforme
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
|
Posté le: 15/09/11 16:30 Sujet du message: |
|
|
ah ba très bien ^^
quand on utilise la fonction convert coordonate en gui, ça leak ?
quand on utilise des fonctions du genre de "position of triggering unit" ça leak ? _________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises |
|
Revenir en haut |
|
|
Vladadamm Floodozaurus
Inscrit le: 11 Fév 2011 Messages: 2151 Sujets: 114 Spécialité en worldedit: Chasser le Dragon, puis l'exterminer proprement avec une petite cuillère et une poêle.
|
Posté le: 15/09/11 16:32 Sujet du message: |
|
|
fulldragon a écrit: | quand on utilise des fonctions du genre de "position of triggering unit" ça leak ? |
A ma connaissance, oui. Après pour les coordonates gui, je sais pas. _________________
|
|
Revenir en haut |
|
|
DaKanibal Membre a fort taux de post
Inscrit le: 12 Sep 2009 Messages: 801 Sujets: 64 Spécialité en worldedit: Ne pas.
|
Posté le: 18/09/11 01:07 Sujet du message: |
|
|
Tout ce qui génère une location leak il me semble. _________________
||**|| |
|
Revenir en haut |
|
|
Vladadamm Floodozaurus
Inscrit le: 11 Fév 2011 Messages: 2151 Sujets: 114 Spécialité en worldedit: Chasser le Dragon, puis l'exterminer proprement avec une petite cuillère et une poêle.
|
Posté le: 31/12/11 15:35 Sujet du message: |
|
|
Est-ce que rajouter un temps d'expiration à un texte flottant remove le leak ?
Par exemple :
Gui: | Trigger: Texte flottant - Change (Last created floating text): Désactiver permanence Texte flottant - Change the lifespan of (Last created floating text) to 5.00 seconds |
_________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 31/12/11 17:28 Sujet du message: |
|
|
Disons que ca ne créé pas de leak.
Après y'a le leak des strings, mais tu ne peux rien y faire.
A chaque fois qu'un nouveau string est utilisé, il est créé dans la table interne, mais réutilisé par la suite.
Faut juste éviter les concaténations de string abusives. _________________
Le violet, c'est moche. |
|
Revenir en haut |
|
|
Toc@rd Membre actif
Inscrit le: 14 Avr 2009 Messages: 175 Sujets: 17 Spécialité en worldedit: Décors
|
Posté le: 20/06/16 15:07 Sujet du message: |
|
|
Salut, j'espère que que vous ne m'en voudrez pas pour le déterrage de topic dans la mesure où c'en est un qui mérite de toujours rester d'actualité !
Je voudrais juste savoir : Est ce que les points type "positions of unit" comme :
Gui: | Trigger: Unité - Create 1 Dummy Furie des Jungles for Joueur 1 (Rouge) at (Position of TohKhaar) facing Orientation bâtiment par défaut degrees |
...génèrent du leak ? Est-ce que je devrais stocker la position de l'unité ici utilisée en variable et la détruire après le déclencheur, où alors ce n'est que les points en régions comme indiqué dans le tuto ?
Merci d'avance. _________________
|
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 20/06/16 16:40 Sujet du message: |
|
|
J'ai décompilé la fonction GetUnitLoc:
Code: | int __cdecl Jass_GetUnitLoc(int hUnit)
{
int result; // eax@1
int unit; // eax@2
float x; // [sp+0h] [bp-18h]@2
float y; // [sp+4h] [bp-14h]@2
float z; // [sp+8h] [bp-10h]@2
float unitPosition[3]; // [sp+Ch] [bp-Ch]@2
result = CheckUnitHandle((void *)hUnit);
if ( result )
{
unit = (*(int (__thiscall **)(int))(*(_DWORD *)result + 184))(result);
GetUnitPosition(unit, unitPosition);
x = unitPosition[0];
y = unitPosition[1];
z = unitPosition[2];
result = Jass_Location(&x, &y);
}
return result;
} |
Jass_Location est la fonction jass Location qui permet de créer un object Point qu'il faut évidemment détruire une fois qu'on l'a utilisé afin d'éviter une fuite de mémoire.
Donc oui cela provoque une fuite de mémoire. _________________
|
|
Revenir en haut |
|
|
Toc@rd Membre actif
Inscrit le: 14 Avr 2009 Messages: 175 Sujets: 17 Spécialité en worldedit: Décors
|
Posté le: 20/06/16 18:13 Sujet du message: Re: Les secrets des Memory Leaks |
|
|
Merci, je vais traiter tout ça. Est ce que stocker cette position dans une variable et la supprimer avec le Cscript indiqué ici sera correct ?
Gui: | Trigger: Custom script: call RemoveLocation( udg_TmpPoint[1] ) |
Autre chose, en nettoyant le leak de ma campagne à l'aide des indications de ce topic, j'ai constaté que le script :
Gui: | Trigger: Custom script: call DestroyGroup( udg_TmpGroup ) | ... rendait impossible la répétition du déclencheur dans lequel il agit. En l'occurrence cela m'est très problématique car j'utilise souvent des groupes pour des déclencheurs de compétences, donc qui ont vocation à être répétés.
Quelqu'un saurait comment pallier à ce problème ? _________________
|
|
Revenir en haut |
|
|
Ayane Bot administrateur
Inscrit le: 17 Sep 2007 Messages: 2009 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 20/06/16 18:45 Sujet du message: |
|
|
1/ Oui.
2/ Facile, ne détruit pas le groupe...
Note: il est inutile de se fatiguer avec les déclencheurs à faible usage, les fuites de mémoires occasionnées sont négligeables et seront récupérées à la fermeture de la carte. _________________
|
|
Revenir en haut |
|
|
Toc@rd Membre actif
Inscrit le: 14 Avr 2009 Messages: 175 Sujets: 17 Spécialité en worldedit: Décors
|
Posté le: 20/06/16 18:50 Sujet du message: |
|
|
Du coup y'a un autre moyen de supprimer le leak qu'il génère ? _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 20/06/16 19:36 Sujet du message: |
|
|
Crée un groupe au début du déclencheur, détruit le à la fin. Si tu veux être perfectionniste, tu dois aussi nuller le groupe (set udg_TmpGroup = null) après l'avoir détruit. Bien que si tu utilises cette variable autre part, il n'y pas vraiment nécessité. _________________
|
|
Revenir en haut |
|
|
Toc@rd Membre actif
Inscrit le: 14 Avr 2009 Messages: 175 Sujets: 17 Spécialité en worldedit: Décors
|
Posté le: 20/06/16 20:41 Sujet du message: |
|
|
D'accord, mais saurais-tu m'indiquer le script pour créer le groupe s'il te plait ? Parce qu'en fouillant sur le forum j'ai trouvé quelqu'un qui a eu exactement le même problème sur ce sujet : méthode sort de zone. Rhadamante lui a indiqué la même solution, créer le groupe au début du déclencheur avec
Gui: | Trigger: Custom script: local group udg_Charme_groupe = CreateGroup() |
Le nom de ma variable groupe unit s'appelle "FurieGroupUnit" ; ne sachant pas comment marchent ces scripts j'ai essayé de mettre Gui: | Trigger: local group udg_FurieGroupUnit = CreateGroup() |
ainsi que Gui: | Trigger: local group udg_FurieGroupUnit = CreateGroup(FurieGroupUnit) |
...comme première action du déclencheur, et dans les deux cas ça annule tous les effets des déclencheurs lié au groupe unité.
Merci beaucoup. _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 20/06/16 21:05 Sujet du message: |
|
|
Le deuxième exemple est tout simplement faux. Le premier est faux car tu essaie de créer une variable locale (concept qui n'est pas apparent en GUI mais qui est fondamental en Jass) ayant le même nom qu'une variable globale.
La solution correcte est :
Jass: | set udg_FurieGroupUnit = CreateGroup() |
Si tu veux utiliser une variable locale (qui ne servira que pour ce déclencheur). Il faut placer en haut de ton déclencheur.
Jass: | local group nomdugroup = CreateGroup() |
Ensuite tu référence le groupe tout au long du déclencheur par nomdugroup. N'oublie pas de détruire et de nuller le groupe à la fin de ton déclencheur. _________________
|
|
Revenir en haut |
|
|
|