Tableaux et mémoire

4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 6.0


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) * longueur déclarée (+1 si impair, +2 si pair)
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) * 6 + somme de la taille de chaque texte
Deux dimensions(1+nombre d'éléments) * 12 + somme de la taille de chaque tableau

Note : 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
   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

Référence

APPELER SUR ERREUR, Présentation des tableaux.


4D - Documentation   Français   English   German   Español   Japanese   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant