L'affectation à nil se sert à rien, c'est le SetLength qui compte, les RTTI déjà en D7 faut le job pour le deux* types managés soit donc String et Array.
Si tu as le code de l'unité System, c'est
Finalize (_FinalizeArray) qui est invoqué pour libérer un tableau, soit lors du SetLength pour un tableau, soit lors la sortie de fonction sur le
end; que c'est appelé automatiquement pour tous tableaux.
Si tu es en FastMM, ne soit pas surpris que certaines valeurs sont encore lisibles, si le bloc contient encore des données d'autres variables, il n'est pas encore libéré.
Tu fais quasiment tout en ShortString ?
C'est pour tronquer les valeurs ?
Sache que cela occupe plus de mémoire des ShortString[8] que de String (préfixé en interne par le compteur de référence et longueur) lorsque tout est encore vide, une fois rempli, tout dépend les données et la longueur des ShortString.
deux* pour les types simples
Tu as aussi le Variant et OleVariant qui sont désalloués à la fin de portée ou l'affectation à Unassigned.
Tu as aussi le les Interface, encore un compteur de référence, là c'est l'affectation à nil qui compte, le compilateur ajouter lui-même le
_Release
Partager