Artículo
· 16 ene, 2024 Lectura de 2 min

Qué hacer cuando se utiliza una gran cantidad de memoria al procesar relaciones

Preguntas frecuentes de InterSystems

Si se establece una relación y hay una gran cantidad de n en una proporción de 1:n, se puede consumir una gran cantidad de memoria debido al procesamiento secuencial de la relación.

Después de hacer referencia a un objeto de muchos lados en un programa y cambiarlo internamente, simplemente liberar la variable que contiene el OREF (eliminarla, establecer otro valor, etc.) no liberará el objeto de muchos lados ni el objeto de relación. Ésta es la causa.

Para liberarlos completamente de la memoria, hay que liberarlos explícitamente liberando la variable OREF y ejecutando el objeto Relación del método

%UnSwizzleAt<%Library.RelationshipObject> .

- Ejemplo -

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

No hay ningún problema particular si solo hay unos pocos objetos de muchos lados, pero si hay una gran cantidad de objetos vinculados y se accede a ellos continuamente mediante una instrucción de bucle, una gran cantidad de objetos continuará expandiéndose en la memoria. Ésta es una de las causas de la presión de la memoria.

Para evitar este tipo de situaciones, es necesario incluir un procesamiento de liberación explícito.

Comentarios (0)1
Inicie sesión o regístrese para continuar