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

C# Discussion :

importance de donner le bon type


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut importance de donner le bon type
    salut,

    une petite question d'ordre général .


    voici quelques déclarations de Math.Round du .NET Framework :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            public static decimal Round(decimal d, int decimals);
            public static decimal Round(decimal d, int decimals, MidpointRounding
    je ne comprends pas l'utilisation de int decimals ... pourquoi déclarer un entier avec signe pouvant aller de -2 147 483 648 à 2 147 483 647 alors qu'un uint() ou encore mieux : un byte ferait parfaitement l'affaire ?


    ne faut t'il pas utiliser le type qui limitera le plus le gaspillage d'espace ?

    merci

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par Lorenzo77 Voir le message
    je ne comprends pas l'utilisation de int decimals ... pourquoi déclarer un entier avec signe pouvant aller de -2 147 483 648 à 2 147 483 647 alors qu'un uint() ou encore mieux : un byte ferait parfaitement l'affaire ?
    int est plus rapide qu'un byte.

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Il se trouve qu'un int a exactement la taille optimale pour le système sur lequel il tourne, à savoir 32bits sur un système 32bits et 64bits sur un système 64bits. La taille d'un int dépend donc du système et le système possède des optimisations spécifique pour cette taille mémoire.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Intéressante question. Je me la suis posé récemment en plus ^^

    Donc au final, il n'y a aucun intérêt à modifier le type sous-jascent sur les énumérations (int par défaut, et je comprends mieux pourquoi maintenant) ni à chercher à "optimiser" en typant au plus proche des valeurs attendues ? En général tout du moins car je suppose que dans certains cas cela apporte quelque chose.

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    J'ajoute qu'en près de 2 ans de C#, j'ai jamais utilisé ni les short ni les long...

    Pour un certain nombres d'applis (dans les 95% on va dire), se contenter des int suffit, ça évite notamment de devoir caster un long en int ou un int en short, au risque d'avoir une perte de précision.

  6. #6
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    merci pour les réponses, j'aurais du poser cette question avant

    je viens de faire un test :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
                Debug d = Debug.getRefDebug();
                Bench b = new Bench(5, 6, 1, true);
     
                b.benchDebut();
                for (uint a = 0; a < 10000000; a++)
                {
                }
                d.info("uint : " + b.benchFin());
     
                b.benchDebut();
                for (long a = 0; a < 10000000; a++)
                {
                }
                d.info("long : " + b.benchFin());
     
                b.benchDebut();
                for (int a = 0; a < 10000000; a++)
                {
                }
                d.info("int : " + b.benchFin());
     
                b.benchDebut();
                for (decimal a = 0; a < 10000000; a++)
                {
                }
                d.info("decimal : " + b.benchFin());
     
                b.benchDebut();
                for (double a = 0; a < 10000000; a++)
                {
                }
                d.info("double : " + b.benchFin());
     
                b.benchDebut();
                for (ulong a = 0; a < 10000000; a++)
                {
                }
                d.info("ulong : " + b.benchFin());
     
                b.benchDebut();
                for (float a = 0; a < 10000000; a++)
                {
                }
                d.info("float : " + b.benchFin());
    résultat :
    uint : 11,9016 Millieme
    long : 11,951 Millieme
    int : 9,7432 Millieme
    decimal : 425,9553 Millieme
    double : 37,9756 Millieme
    ulong : 12,6518 Millieme
    float : 19,6486 Millieme

    certains types numérique sont vraiment plus rapide que d'autres, le int gagne !

Discussions similaires

  1. Erreur a l'import d'un librairie de type
    Par Sunchaser dans le forum C++Builder
    Réponses: 0
    Dernier message: 27/01/2008, 23h36
  2. Comment donner un bon look à mes formulaires?
    Par Yvgak dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/10/2007, 13h24
  3. Recuperation d'un objet dans le bon type
    Par Seth77 dans le forum C#
    Réponses: 3
    Dernier message: 01/05/2007, 14h52
  4. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  5. Réponses: 4
    Dernier message: 19/10/2005, 23h30

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