Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=b7140258a3609a6d485d0ced73fe3723Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Les secrets des Memory Leaks
Aller à la page Précédente  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels
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.


MessagePosté le: 10/09/11 14:11    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 15/09/11 16:23    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 15/09/11 16:30    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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.


MessagePosté le: 15/09/11 16:32    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 18/09/11 01:07    Sujet du message: Citer

Tout ce qui génère une location leak il me semble.
_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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.


MessagePosté le: 31/12/11 15:35    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 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...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 31/12/11 17:28    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Toc@rd
Membre actif


Inscrit le: 14 Avr 2009
Messages: 175
Sujets: 17
Spécialité en worldedit: Décors


MessagePosté le: 20/06/16 15:07    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1) Ayane (Quantité : 1)

MessagePosté le: 20/06/16 16:40    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Toc@rd
Membre actif


Inscrit le: 14 Avr 2009
Messages: 175
Sujets: 17
Spécialité en worldedit: Décors


MessagePosté le: 20/06/16 18:13    Sujet du message: Re: Les secrets des Memory Leaks Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Ayane
Bot administrateur


Inscrit le: 17 Sep 2007
Messages: 2009
Sujets: 49

Médailles: 2 (En savoir plus...)
Ayane (Quantité : 1) Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 20/06/16 18:45    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Toc@rd
Membre actif


Inscrit le: 14 Avr 2009
Messages: 175
Sujets: 17
Spécialité en worldedit: Décors


MessagePosté le: 20/06/16 18:50    Sujet du message: Citer

Du coup y'a un autre moyen de supprimer le leak qu'il génère ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 20/06/16 19:36    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Toc@rd
Membre actif


Inscrit le: 14 Avr 2009
Messages: 175
Sujets: 17
Spécialité en worldedit: Décors


MessagePosté le: 20/06/16 20:41    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 20/06/16 21:05    Sujet du message: Citer

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
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Suivante
Page 8 sur 10

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com