4D v16.3

Arrays e Memória

Página Inicial

 
4D v16.3
Arrays e Memória

Arrays e Memória  


 

 

Diferentemente dos dados que você armazena no disco usando tabelas e registros, um array é sempre guardado em sua totalidade na memória.

Por exemplo, se todos os códigos postais dos Estados Unidos fossem introduzidos em uma tabela [Códigos Postais], a tabela teria cerca de 100 000 registros. Para além, esta tabela incluiria vários campos: o código postal e a cidade, bairro e estado correspondentes. Se você selecionar apenas os códigos postais da California, o sistema de banco de dados 4D cria a seleção de registros correspondentes dentro da tabela [Códigos Postais], e então carrega os registros apenas quando são necessários (por exemplo, quando são visualizados ou quando são impressos). Em outras palavras, você pode trabalhar com séries ordenadas de valores (do mesmo tipo para cada campo) que é parcialmente carregadas do disco para dentro da memória pelo sistema de banco de dados 4D.

Fazer a mesma coisa com arrays seria muito complicado pelas seguintes razões:

  • Para manter os quatro tipos de informação (código postal, bairro, cidade, estado), você teria que manter quatro arrays grandes na memória.
  • Como um array é sempre guardado em sua totalidade na memória, você teria que manter todas as informações de códigos postais na memória durante a sessão de trabalho, mesmo que os dados não estejam sempre em uso.
  • Novamente, como um array é sempre guardado em sua totalidade na memória, cada vez que o banco de dados é iniciado e finalizado, os quatro arrays teriam que ser carregados e então salvos no disco, mesmo que os dados não fossem usados ou modificados durante a sessão de trabalho.

Conclusão: arrays foram desenvolvidos para armazenar uma quantidade razoável de dados por um perído curto de tempo. Por outro lado, como arrays são salvos na memória, eles são utilizados de maneira fácil e rápida.

Entretanto, em algumas circunstâncias, você pode precisar de trabalhar com arrays com centenas ou milhares de elementos. A tabela seguinte lista as fórmulas usadas para calcular a quantidade de memória utilizada para cada array:

Tipo de arrayFórmula para determinar a quantidade de memória utilizada em bytes
Booleano(31+Número de elementos)8
Data(1+Número de elementos) * 6
Alfa (modo Unicode)(1+Número de elementos) * (Suma do tamanho de cada texto)
Inteiro(1+Número de elementos) * 2
Inteiro longo(1+Número de elementos) * 4
Imagem(1+Número de elementos) * 4 + Soma do tamanho de cada imagem
Ponteiro(1+Número de elementos) * 16
Real(1+Número de elementos) * 8
Texto (modo Unicode)(1+Número de elementos) * 6 + Soma do tamanho de cada texto
Duas dimensões(1+Número de elementos) * 12 + Soma do tamanho de cada array

Nota

  • O tamanho de um texto em memória é calculado utilizando a fórmula: ((Longitude + 1) * 2)
  • Alguns bytes adcionais são necessários para manter contato com o elemento selecionado, o número de elementos, e o array por si mesmo.

Quando se trabalha com arrays muito grandes, a melhor forma para lidar com situações de memória cheia é acompanhar a criação dos arrays com um método de projeto ON ERR CALL Exemplo:

  ` Você vai executar uma operação por toda a noite
  ` que requer a criação de arrays grandes. Para evitar
  ` erros na noite, crie os arraays no começo da operação
  ` e teste os erros neste momento:
 gError:=0 ` Inicialização
 ON ERR CALL("MANEJO DE ERROS") ` Instala um método para buscar erros
 ARRAY STRING(63;asEsteArray;50000) ` Aproximadamente 3125K em modo ASCII
 ARRAY REAL(arOutroArray;50000) ` 488K
 ON ERR CALL("") `Não é preciso mais buscar erros
 If(gError=0)
  ` Os arrays podem ser criados
  ` e vamos seguir com a operação
 Else
    ALERT("Esta operação precisa de mais memória")
 End if
  ` Qualquer que seja o caso, não precisamos mais dos arrays
 CLEAR VARIABLE(asEsteArray)
 CLEAR VARIABLE(arOutroArray)

O Método de projeto CONTROLE DE ERROS é o seguinte:

  ` Método de projeto CONTROLE DE ERROS
 gError:=Error ` Retornar o código do erro



Ver também 

Arrays
ON ERR CALL

 
PROPRIEDADES 

Produto: 4D
Tema: Arrays

 
HISTÓRIA 

 
ARTICLE USAGE

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