4D v16.3

Tableaux et mémoire

Accueil

 
4D v16.3
Tableaux et mémoire

Tableaux et mémoire  


 

 

A la différence des données que vous stockez sur disque lorsque vous utilisez des tables ou des enregistrements, un tableau réside toujours en mémoire dans son intégralité.

Par exemple, si tous les codes postaux américains étaient saisis dans une table [Codes Postaux], celle-ci contiendrait environ 100 000 enregistrements. De plus, cette table comporterait plusieurs champs : le code postal lui-même ainsi que la ville, le comté et l'état correspondants. Si vous ne sélectionnez que les codes postaux de Californie, 4D crée la sélection d'enregistrements correspondante à l'intérieur de la table [Codes Postaux], et ensuite ne charge les enregistrements que lorsque vous en avez besoin (par exemple, pour les afficher ou les imprimer). En d'autres termes, vous travaillez avec une série ordonnée de valeurs (du même type pour chaque champ) partiellement chargée du disque en mémoire.

Procéder de la même manière avec les tableaux serait laborieux, pour les raisons suivantes :

  • Pour maintenir les quatre types d'information (code postal, ville, comté, état), vous auriez besoin de quatre grands tableaux en mémoire.
  • Comme un tableau réside en mémoire dans son intégralité, vous seriez obligé de garder tous les codes postaux en mémoire pendant toute la session de travail, même si les données n'étaient pas utilisées en permanence.
  • Toujours parce qu'un tableau réside en mémoire dans son intégralité, les quatre tableaux devraient être chargés ou sauvegardés sur le disque à chaque fois que vous démarreriez ou quitteriez l'application, quand bien même les données ne seraient d'aucune utilité pour la session de travail.

Conclusion : Les tableaux ont pour rôle de manipuler une certaine quantité de données pendant une période brève. En contrepartie, comme ils résident en mémoire, ils sont d'une utilisation rapide et facile.

Cependant, dans certaines circonstances, vous pouvez avoir besoin de tableaux contenant des centaines ou des milliers d'éléments. Voici les formules à appliquer pour calculer la quantité de mémoire utilisée pour chaque type de tableau:

Type de TableauCalcul de la quantité de mémoire en octets
Booléen(31+nombre d'éléments)/8
Date(1+nombre d'éléments) * 6
Alpha(1+nombre d'éléments) * (somme de la taille de chaque texte)
Entier(1+nombre d'éléments) * 2
Entier long(1+nombre d'éléments) * 4
Image(1+nombre d'éléments) * 4 + somme de la taille de chaque image
Pointeur(1+nombre d'éléments) * 16
Réel(1+nombre d'éléments) * 8
Texte(1+nombre d'éléments) * (somme de la taille de chaque texte)
Deux dimensions(1+nombre d'éléments) * 12 + somme de la taille de chaque tableau

Notes :

  • La taille d'un texte en mémoire se calcule par la formule ((Longueur + 1) * 2)
  • Quelques octets supplémentaires sont requis pour le repérage de l'élément, le nombre d'éléments et le tableau lui-même.

Lorsque vous travaillez avec de très grands tableaux, la meilleure façon de gérer d'éventuels problèmes de saturation de la mémoire est d'accompagner la création de tableau d'une méthode projet APPELER SUR ERREUR. Exemple :

  // Vous allez lancer une opération batch fonctionnant toute la nuit
  // qui requiert la création de grands tableaux. Pour éviter
  // des erreurs en pleine nuit, créez les tableaux au début de
  // l'opération et testez les erreurs au même moment :
 gError:=0 ` Initialisation
 APPELER SUR ERREUR("GESTION ERREUR") ` Installation de la méthode de gestion d'erreurs
 TABLEAU ALPHA(63;asCeTableau;50000) ` Environ 3125 Ko en mode ASCII
 TABLEAU REEL(arCetAutreTableau;50000) ` 488 Ko
 APPELER SUR ERREUR("") ` Il n'est plus nécessaire d'intercepter les erreurs
 Si(gError=0)
  //  Les tableaux ont pu être créés
  //  poursuivons l'opération
 Sinon
    ALERTE("Cette opération requiert davantage de mémoire !")
 Fin de si
  //  Dans tous les cas, nous n'avons plus besoin des tableaux
 EFFACER VARIABLE(asCeTableau)
 EFFACER VARIABLE(arCetAutreTableau)

La méthode projet GESTION ERREUR est la suivante :

  //  Méthode projet GESTION ERREUR
 gError:=Error ` Retourner le code d'erreur



Voir aussi  

APPELER SUR ERREUR
Présentation des tableaux

 
PROPRIÉTÉS 

Produit : 4D
Thème : Tableaux
Nom intl. : Arrays and Memory

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)