4D v16.3

Arrays y memoria

Inicio

 
4D v16.3
Arrays y memoria

Arrays y memoria  


 

 

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 (modo Unicode)(1+Número de elementos) * (Suma del tamaño de cada texto)
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 (modo Unicode)(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

Notas:

  • El tamaño de un texto en memoria se calcula utilizando la fórmula: ((Longitud + 1) * 2)
  • 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 en modo ASCII
 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

 
PROPIEDADES 

Producto: 4D
Tema: Arrays

 
HISTORIA 

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)