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

Langage Delphi Discussion :

String et ShortString


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut String et ShortString
    Bonjour,
    J'ai fini de développer un "grand" logiciel, mais je pense qu'il utilise beaucoup de RAM, et j'ai une trentaine de variables globales, et beaucoup sont des tableaux de string (array [1..25) of String).

    Pensez vous que je puisse passer à ShortString (le contenu des variables ne dépasse aucunement les 255 caractères, donc un string, c'est un peu abusé ?!) , et cela est-il vraiment bénéfique pour la RAM ou le processeur.

    Merci.

  2. #2
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    bonjour ; les logiciel sa ne fini jamais y'a toujours quelque chose à faire (bug , mis à jour et surtout la maintenance..)
    on ce qui concerne le type: c'est une information à traité a partir de la base de donnée donc ce qui fait un travail pour le processeur , la RAM et en + le stockage de cette information.
    donc si votre BDD est volumineuse et vous vous avez beaucoup de traitements automatiquement vous aurez une certaine lenteur.
    a mon avis si je ne me tramp pas le choix du type doit être fait avant même de commencé le développement ( dans la modélisation : cahier de charge , dictionnaire de données éééé....)

    consult : FAQ Delphi : http://delphi.developpez.com/faq/

  3. #3
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Je vais répondre d'une façon beaucoup plus terre à terre :
    Non, l'usage de ShortString à la place de string ne réduira pas tes besoins en mémoire. Au contraire, il est augmentera.

    En effet, le type ShortString occupe toujours 256 octets en mémoire. Le type string, lui, occupe 13 + Length(Str) octets en mémoire. Donc, toute chaîne dont la longueur est < 243 est stockée de manière plus économe dans une string que dans une ShortString.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    Mis à part le problème d'économie de mémoire, lorsqu'on déclare par exemple le type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Type Str12  = string[12]; // pour des chaînes de 12 caractères
    dans lequel le Length(Str) est donc déclaré une fois pour toutes, est-ce que par la suite on n'y gagne pas un peu en vitesse de traitement, vu que le gestionnaire de string's est soulagé des incessants SetLength(Str,12) ???

    A+.

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2007
    Messages : 94
    Points : 134
    Points
    134
    Par défaut
    Je ne pense pas que la rapidité d'exécution d'une application se résoud seulement au choix des types. Il y'a bien d'autres paramètres tes algos par example. Je te conseille donc de revoire tous tes unités de traitement.
    Tu as utilisé quoi pour inter agir avec ta base de données?BDE ADO???Et quel SGBD?

  6. #6
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    il faut par exemple éviter ce genre de code..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ....
       Result := Result +s

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 761
    Points : 13 368
    Points
    13 368
    Par défaut
    Il ne faut rien éviter du tout
    Ce qu'on perd (éventuellement) à l'initialisation se retrouve largement à l'utilisation.

    J'ai déjà créé des tableaux de 100'000 chaînes (Dictionnaire; aide à la saisie) sans latence particuliaire (peut-être 2 sec. et avec calcul de hash, etc.). Alors 30 enregistrements de 25 chaînes

    Je rejoins sjrd sur ses propos et rajouterais: Shortstring n'est pas l'avenir (unicode) et est définitivement à bannir de tout nouveaux développements, si ce n'est peut-être l'écriture dans des fichiers typés. (et encore)

  8. #8
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    et rajouterais: Shortstring n'est pas l'avenir (unicode) et est définitivement à bannir de tout nouveaux développements, si ce n'est peut-être l'écriture dans des fichiers typés. (et encore)
    +1
    D'ailleurs les fichiers typés sont à bannir aussi depuis l'invention des streams

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Je vais répondre d'une façon beaucoup plus terre à terre :
    Non, l'usage de ShortString à la place de string ne réduira pas tes besoins en mémoire. Au contraire, il est augmentera.

    En effet, le type ShortString occupe toujours 256 octets en mémoire. Le type string, lui, occupe 13 + Length(Str) octets en mémoire. Donc, toute chaîne dont la longueur est < 243 est stockée de manière plus économe dans une string que dans une ShortString.
    Bonjour,
    Merci beaucoup pour vos réponses, c'était en fait ça que je cherchais à savoir.
    Pour ceux qui me parlent de base de donnés, c'était pas ça la question.

    Je restais alors sur String au lieu de ShortSring, pour le reste (les aglo...etc) C'est une toute question, donc ça portas plus sur mes optimisations.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  2. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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