IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Tableaux en lecture seule dans un objet.


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Tableaux en lecture seule dans un objet.
    Bonsoir,

    j'ai un objet contenant des tableaux, et je souhaiterais que ceux-ci soient accessible en lecture seule. Pour l'instant mon code ressemble à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    type
      TMaClasse = class
      private
        FTab: array of Integer;
        function GetTab(Index: Cardinal): Integer;
      public
        //il y a aussi un constructeur qui initialise les tableaux
        property Tab[Index: Cardinal]: Cardinal read GetTab;
      end;
     
    implementation
     
    function TMaClasse.GetTab(Index: Cardinal): Integer;
    begin
      Result:= FTab[Index];
    end;
    Mais du coup les temps de lecture sont plus long que si le tableau était par exemple une variable publique, puisqu'on appelle une fonction.
    D'où ma question: est-il possible d'avoir un tableau en lecture seule, sans avoir ce problème de temps d'accès supplémentaire ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Bonjour,
    Citation Envoyé par Zhangdar Voir le message
    Mais du coup les temps de lecture sont plus long que si le tableau était par exemple une variable publique, puisqu'on appelle une fonction.
    D'où ma question: est-il possible d'avoir un tableau en lecture seule, sans avoir ce problème de temps d'accès supplémentaire ?
    La différence de temps d'accès est tellement faible entre les 2 qu'il faudrait que tu ais des milliards d'accès pour avoir peut être une différence significative...

    Ton implémentation du tableau en lecture seule est donc la manière adéquate de faire...
    --
    Philippe.

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 371
    Points
    11 371
    Billets dans le blog
    6
    Par défaut
    peut-on déclarer le getter inline en espérant gagner qq ppm de temps ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour, merci de vos réponses.

    A Ph. B.:
    je tente en fait d'implémenter un solveur de Rubik's Cube avec la méthode de Kociemba. Concrètement, ma plus longue fonction demande 15 milliards de lectures minimum dans de tels tableaux. Elle met environ 11 minutes à s'executer et si en changeant la lecture dans les tableaux je pouvais gagner quelques dizaines de seconde, ca serait vraiment pas mal.

    A tourlourou:
    je ne savais même pas que l'on pouvait inliner les fonctions d'une classe. J'ai fait un petit programme test pour comparer différentes méthode d'accès, ca va plus vite en inline, mais c'est toujours très supérieur au cas où le tableau est public.

    Est-ce possible d'aller plus vite ?

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 371
    Points
    11 371
    Billets dans le blog
    6
    Par défaut
    une fois initialisé, le contenu du tableau est-il constant ou variable ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Oui une fois initialisé le contenu est constant. C'est juste une classe qui fait office de base de donnée, qui charge / décharge des fichiers dans des tableaux en fonction des besoins d'autres classes.

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 879
    Points : 11 371
    Points
    11 371
    Billets dans le blog
    6
    Par défaut
    j'ai beau me torturer les méninges, je ne vois pas... désolé !

  8. #8
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Citation Envoyé par Zhangdar Voir le message
    je tente en fait d'implémenter un solveur de Rubik's Cube avec la méthode de Kociemba. Concrètement, ma plus longue fonction demande 15 milliards de lectures minimum dans de tels tableaux. Elle met environ 11 minutes à s'executer et si en changeant la lecture dans les tableaux je pouvais gagner quelques dizaines de seconde, ca serait vraiment pas mal.
    Ok je suis allé voir (très rapidement) la méthode Kociemba pour résoudre le cube.
    J'ai fait un petit test en prenant un tableau de 100 000 entiers et en y accédant 150 000 fois suivant les 2 manières (propriété ou tableau direct) : 34 secondes de différence avec D7 et un portable Compaq Presario B1010 (Pentium P4 2,3Ghz et 1 GO de RAM) pour 15 milliards d'itérations, soit 5% de gain.
    Je ne connais pas le code que tu développes, si il est utilisable par des développeurs tiers ou non, mais à première vue, je ne passerai pas par une propriété, je laisserai le tableau en accès lecture/écriture.
    Après, je n'ai pas analysé la méthode en question, mais il y a peut-être des optimisations à réaliser soit sur l'algo en tant que tel, soit sur sa traduction en code Delphi.
    --
    Philippe.

Discussions similaires

  1. [1.x] Champs en lecture seule dans les relations embarquées
    Par rastaferraille dans le forum Symfony
    Réponses: 11
    Dernier message: 26/04/2010, 11h40
  2. [SP-2007] Colonne en lecture seule dans une liste
    Par pete666 dans le forum SharePoint
    Réponses: 1
    Dernier message: 24/11/2009, 16h24
  3. Champs en lecture seul dans un formulaire.
    Par lesanglier dans le forum Configuration
    Réponses: 0
    Dernier message: 05/10/2009, 16h56
  4. Champs en lecture seul dans un formulaire.
    Par lesanglier dans le forum SharePoint
    Réponses: 0
    Dernier message: 05/10/2009, 16h56
  5. Bibliothèque de document en lecture seul dans outlook
    Par Faro dans le forum SharePoint
    Réponses: 0
    Dernier message: 11/01/2008, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo