Arrays y memoria

4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente

versión 6.0


A diferencia de los datos que usted almacena en disco utilizando tablas y registros, un array siempre está en memoria.

Por ejemplo, si todos los códigos postales de Estados Unidos fueran introducidos en la tabla [Cogidos Postales], la tabla tendría alrededor de 100 000 registros. Además, esta tabla incluiría varios campos: el código postal y la ciudad, condado y estado correspondiente. Si selecciona sólo los códigos postales de California, 4D crea la selección de registros correspondiente al interior de la tabla [Codigos Postales], y sólo carga los registros cuando sea necesario (por ejemplo, cuando se visualizan o imprimen). En otras palabras, usted trabaja con una serie ordenada de valores (del mismo tipo para cada campo) que se carga parcialmente del disco a la memoria por el motor de la base de 4D.

Hacer lo mismo con arrays sería muy complicado por las siguientes razones:

Para mantener los cuatro tipos de información (código postal, ciudad, condado, estado), tendría que mantener cuatro arrays grandes en memoria.

Como un array siempre está totalmente en memoria, tendría que mantener todos los códigos postales en memoria durante la sesión de trabajo, incluso si los datos no están siempre en uso.

Nuevamente, como un array siempre está en memoria en su totalidad, cada vez que inicia y sale de la base, los cuatro arrays tendrían que cargarse y guardarse en el disco, aún cuando los datos no se utilicen o modifiquen durante la sesión de trabajo.

Conclusión: los arrays están pensados para manipular una cierta cantidad de datos por un periódo corto. Por otra parte, como los arrays están en memoria, se utilizan fácil y rápidamente.

Sin embargo, en algunas circusntancias, podría necesitar trabajar con arrays de cientos o miles de elementos. La siguiente tabla lista las fórmulas utilizadas para calcular la cantidad de memoria utilizada para cada tipo de array:

Tipo de arrayFórmula para determinar la cantidad de memoria utilizada en bytes
Booleano(31+Número de elementos)\8
Fecha(1+Número de elementos) * 6
Alfa(1+Número de elementos) * Longitud declarada (+1 si es impar,+2 si es par)
Entero(1+Número de elementos) * 2
Entero largo(1+Número de elementos) * 4
Imagen(1+Número de elementos) * 4 + Suma del tamaño de cada imagen
Puntero(1+Número de elementos) * 16
Real(1+Número de elementos) * 8
Texto(1+Número de elementos) * 6 + Suma del tamaño de cada texto
Dos dimensiones(1+Número de elementos) * 12 + Suma del tamaño de cada array

Nota: Algunos pocos bytes adicionales son necesarios para mantener contacto con el elemento seleccionado, el número de elementos, y el mismo array.

Cuando trabaja con arrays muy grandes, la mejor forma de manejar las situaciones de saturación de la memoria es acompañar la creación del array de un método de proyecto ON ERR CALL.. Ejemplo:

      ` Usted va a ejecutar una operación por lotes toda la noche
      ` que requiere la creación de arrays grandes. Para evitar
      ` errores en la noche, cree los arrays al comienzo de la operación
      ` y pruebe los errores en este momento:
   gError:=0 ` Inicialización
   ON ERR CALL ("MANEJO DE ERRORES") ` Instalación del método de gestión de errores
   ARRAY STRING (63;asEsteArray;50000) ` Apróximadamente 3125K
   ARRAY REAL (arOtroArray;50000) ` 488K
   ON ERR CALL ("") `Ya no es necesario interceptar errores
   If (gError=0)
      ` Los arrays pudieron ser creados 
      ` y vamos a seguir con la operación 
   Else
      ALERT ("Esta operación necesita más memoria")
   End if
      ` Cualquiera que sea el caso, no necesitamos más los arrays
   CLEAR VARIABLE (asEsteArray)
   CLEAR VARIABLE (arOtroArray)

El método de proyecto MANEJO DE ERRORES es el siguiente:

      ` Método de proyecto MANEJO DE ERRORES
   gError:=Error ` Devolver el código del error

Ver también

Arrays, ON ERR CALL.


4D - Documentation   Français   English   German   Español   4D v11 SQL, Comandos por temas   4D v11 SQL, Lista alfabética de comandos   4D v11 SQL, Constantes por temas   Regresar   Anterior   Siguiente