Article
· Jan 6 2m de lecture

Que faire lorsqu'une grande quantité de mémoire est utilisée lors du traitement des relations

InterSystems FAQ rubric

Si une relation est définie et qu'il existe un grand nombre de n dans un rapport 1:n, une grande quantité de mémoire peut être consommée en raison du traitement séquentiel de la relation.

Après avoir référencé un objet à plusieurs côtés dans un programme et l'avoir fait pivoter en interne, le simple fait de libérer la variable contenant l'OREF (en la supprimant, en définissant une autre valeur, etc.) ne libérera pas les objets liés ni l'objet de relation. 

Pour les libérer complètement de la mémoire, vous devez les libérer explicitement en libérant la variable OREF et en exécutant la commande de l'objet Relation.

Méthode%UnSwizzleAt<%Library.RelationshipObject>.

- Exemple d'utilisation -

 Do {
    Set employee = company.Employees.GetNext(.key)
    If (employee '= "") {
        Write employee.Name,!
        // remove employee from memory
        Do company.Employees.%UnSwizzleAt(key)
    }
 } While (key '= ""

Il n'y a pas de problème particulier s'il n'y a que quelques objets liés, mais s'il y a un grand nombre d'objets liés et qu'on y accède en continu à l'aide d'une instruction de boucle, un grand nombre d'objets continueront à être étendus en mémoire. C'est l'une des causes de la pression sur la mémoire.

Pour éviter de telles situations, il est nécessaire d’inclure un traitement explicite des libérations d'objets.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer