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

D Discussion :

D mauvais pour l'info de gestion ?


Sujet :

D

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 356
    Points
    356
    Par défaut D mauvais pour l'info de gestion ?
    Bonjour,

    Voilà j'étais plutôt intéressé par ce langage. Une sorte de C++ simplifié qui combine performance et productivité dans un seul et même langage.
    Du coup j'installe tout ça, je fais un test de perf et que vois-je ? Mon programme en D met 40 secondes là où en C# il n'en met que 15 !

    Le code C# :
    Code c# : 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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    using System;
    using System.Diagnostics;
     
    namespace CSharpPerform
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Tape \"Y\" to launch benchmark or any other touch to exit program :");
                string s = Console.ReadLine();
     
                while(s == "y" || s == "Y")
                {
                    Benchmark();
     
                    s = Console.ReadLine();
                }
            }
     
            static void Benchmark()
            {
                Stopwatch time = new Stopwatch();
                time.Start();
     
                uint count = 0;
                student michael = null;
     
                while (count < 1000000)
                {
                    michael = new student("Michael", new DateTime(1998, 5, 1), 12);
                    string state = michael.GetState();
                    count++;
                }
     
                time.Stop();
                Console.WriteLine("Temps d'exécution : " + time.ElapsedMilliseconds.ToString() + "ms");
            }
     
            class student
            {
                private string _name;
                private DateTime _birthday;
                private int _evaluation;
     
                public string GetState()
                {
                    return _name + " est né le " + _birthday.ToLongDateString() + " et son évaluation est de " + _evaluation.ToString();
                }
     
                public student(string name, DateTime birthday, int eval)
                {
                    _name = name;
                    _birthday = birthday;
                    _evaluation = eval;
                }
     
                public void SetName(string name)
                {
                    _name = name;
                }
     
                public void SetBirthday(DateTime date)
                {
                    _birthday = date;
                }
     
                public void SetEvaluation(int eval)
                {
                    _evaluation = eval;
                }
            }
        }
    }

    Le code D :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    import std.stdio;
    import std.string;
    import std.datetime;
    import std.conv;
     
    int main(string[] argv)
    {
        writeln("Tape \"Y\" to launch benchmark or any other touch to exit program :");
    	string s = chomp(readln());
     
    	while(s == "y" || s == "Y")
    	{
    		auto bench = benchmark!(Benchmark)(1);
    		writefln("Temps d'exécution : %s ms", bench[0].msecs);
     
    		s = chomp(readln());
    	}
     
        return 0;
    }
     
    void Benchmark()
    {
    	uint count = 0;
    	student michael = null;
     
    	while (count < 1000000)
    	{
    		michael = new student("Michael", Date(1998, 5, 1), 12);
    		dstring state = michael.getState();
    		count++;
    	}
    }
     
    class student
    {
    	private dstring _name;
    	private Date _birthday;
    	private int _evaluation;
     
    	public dstring getState()
    	{
    		return _name ~ " est né le "d ~ to!dstring(_birthday.toSimpleString()) ~ " et son évaluation est de "d ~ to!dstring(_evaluation);
    	}
     
    	this(dstring name, Date birthday, int eval)
    	{
    		_name = name;
    		_birthday = birthday;
    		_evaluation = eval;
    	}
     
    	public void SetName(dstring name)
    	{
    		_name = name;
    	}
     
    	public void SetBirthday(Date birthday)
    	{
    		_birthday = birthday;
    	}
     
    	public void SetEvaluation(int eval)
    	{
    		_evaluation = eval;
    	}
    }
    Le D n'est donc pas fait pour de l'informatique de gestion ? Où alors (surement) ai-je développé la partie D comme un porc ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    As-tu réalisé les tests avec dmd, gdc et ldc ? Je ne serais pas surpris de constater une grande différence, particulièrement entre dmd d'un côté et gdc/ldc de l'autre.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 356
    Points
    356
    Par défaut
    Etant très novice, j'avoue n'avoir testé qu'avec une installation "classique" de D pour Visual Studio. Je vais essayer LDC et GDC si je trouve comment les installer et configurer...

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour, je le confirme qu'il y a une différence.
    Pour info : http://qznc.github.io/d-tut/optimization.html
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 356
    Points
    356
    Par défaut
    Pfiouuuu j'abandonne... Impossible d'utiliser GDC ou LDC sous Visual D ! J'y ai passé ma journée nom de dieu !

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,

    As tu suivie les instructions données ici
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 123
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Merci pour le lien, j'ai réussi à installer gdc. Mais bizarrement, c'est encore pire que pour dmd.

    c# (release) : 6 secondes
    dmd (release + -inline -O) : 10.2 secondes
    gdc (release) : 20.6 secondes


    A noter que l'executable généré par gdc pèse 6778ko alors que le dmd pèse 332ko... Normal ?

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Il semble que vous n'avez aucune option pour l'optimisation dans le code gdc ? En plus il semble que vous avez aussi les symboles de débogage
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bon ici je suis descendu de 3.7 à 2 secondes avec DMD 2.065b3 en faisant les transformations suivantes:

    - utiliser des chaînes UTF-8 au lieu de dstring ce qui est plus idiomatique (wstring et dstring sont plus rarement utilisées)
    - changer student de class en struct ce qui va réduire la pression sur le GC

    Ce qui n'a pas marché par contre:
    - utiliser std.string.format a eu un impact négatif sur la perf surprenant

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    import std.stdio;
    import std.string;
    import std.datetime;
    import std.conv;
    import std.typecons;
     
    int main(string[] argv)
    {
        writeln("Tape \"Y\" to launch benchmark or any other touch to exit program :");
        string s = chomp(readln());
     
        while(s == "y" || s == "Y")
        {
            auto bench = benchmark!(Benchmark)(1);
            writefln("Temps d'exécution : %s ms", bench[0].msecs);
     
            s = chomp(readln());
        }
     
        return 0;
    }
     
    void Benchmark()
    {
        uint count = 0;
     
        while (count < 1000000)
        {
            student michael = student("Michael", Date(1998, 5, 1), 12);
            string state = michael.getState();
            count++;
        }
    }
     
    struct student
    {
        private string _name;
        private Date _birthday;
        private int _evaluation;
     
        public string getState()
        {
            return _name ~ " est né le " ~ _birthday.toSimpleString() ~ " et son évaluation est de " ~ to!string(_evaluation);
        }
     
        this(string name, Date birthday, int eval)
        {
            _name = name;
            _birthday = birthday;
            _evaluation = eval;
        }
     
        public void SetName(string name)
        {
            _name = name;
        }
     
        public void SetBirthday(Date birthday)
        {
            _birthday = birthday;
        }
     
        public void SetEvaluation(int eval)
        {
            _evaluation = eval;
        }
    }
    Le principal problème de ton benchmark pour moi c'est que ne faisant rien avec ce qui est retourné par getState(), un compilo pourrait choisir de faire une boucle complètement vide. Heureusement ça n'arrive pas.
    Je pense que ton benchmark soulève effectivement quelques problèmes de perf loaclisés par rapport aux chaînes de caractères. Probable que LDC/GDC peuvent faire mieux mais comme toi j'ai la flemme de les installer.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 15
    Points
    15
    Par défaut
    En D il faut toujours privilégier les structures aux classes dès que possible, c'est à dire quand on a pas besoin du polymorphisme et de l'héritage.
    Les structures D ne sont vraiment pas comme leurs homologues du C

Discussions similaires

  1. Le D mauvais pour l'informatique de gestion ?
    Par mattdef dans le forum D
    Réponses: 1
    Dernier message: 19/02/2014, 16h59
  2. Réponses: 4
    Dernier message: 16/02/2013, 01h02
  3. Instruction SQL dans un bouton pour filtrer info formulaire
    Par beegees dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 05/09/2005, 13h26
  4. BTS Info de Gestion passé aujourd'hui question pour SQL
    Par red210 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 29/05/2005, 14h48

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