Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#]Opérateur optimisé ou pas ?

Opérateur ?: ou if-else ?

Sujet résolu
    17 août 2011 à 6:34:17

    Bonjour, dans les bouts de code suivants, j'aimerais savoir quelle est la solution la plus optimisée, s'il-vous-plaît :

    public string FullPath
            {
                get 
                {
                    if (m_fileInfo == null)
                        return "";
                    else
                        return m_fileInfo.FullName;
                }
            }
    


    OU ALORS

    public string FullPath
            {
                get 
                {
                    return m_fileInfo == null ? "" : m_fileInfo.FullName;
                }
            }
    


    Je sais qu'au niveau lisibilité, l'exemple un est plus intéressant, cependant, j'aimerais savoir si le Framework .NET effectuera une optimisation dans le cas de figure #2.

    Merci beaucoup de vos réponses,
    gretro
    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2011 à 7:03:25

      Pour que ça soit conventionnel, remplaces tes "" (guillemets) par string.Empty

      Sinon je pense qu'une condition ternaire serait plus simple
      public string FullPath
      {
      	get { return (m_fileInfo == null) ? string.Empty : m_fileInfo.FullName; }
      }
      
      • Partager sur Facebook
      • Partager sur Twitter
        17 août 2011 à 9:26:28

        Bonjour,

        tu peux toi même tester les performances avec la classe Stopwatch par exemple :

        string test = string.Empty;
        bool boolean = (new Random().Next(0, 1).Equals(1)) ? true : false;
        Console.WriteLine("test de l'opperateur ternaire ...");
        Stopwatch sw = new Stopwatch();
        
        sw.Start();
        for (int i = 0; i < 1000000000; i++)
        {
            test = boolean ? string.Empty : "2";
        }
        sw.Stop();
        Console.WriteLine(sw.Elapsed.Milliseconds + " millisecondes");
        Console.WriteLine("test avec if / else ...");
        sw.Restart();
        for (int i = 0; i < 1000000000; i++)
        {
            if (boolean)
                test = string.Empty;
            else
                test = "2";
        }
        sw.Stop();
        Console.WriteLine(sw.Elapsed.Milliseconds + " millisecondes");
        Console.ReadLine();
        

        NB : Il est important de noter que Stopwatch n'est pas parfait car un autre programme tournant au même moment utilisera très certainement votre processeur en même temps. Les chiffres varient donc légèrement d'une exécution à l'autre
        • Partager sur Facebook
        • Partager sur Twitter
          17 août 2011 à 10:05:23

          Alors première chose, tu peux enlever le else dans ton exemple 1 et mettre directement le return. Si la condition dans le if est vérifiée, le return "" t'empêcheras de faire la suite.

          Ensuite, il me semble que la vitesse d'exécution est rigoureusement identique. Ou tu gagnes tellement peu de temps dessus que ça ne vaut même pas la peine d'en parler. ^^

          Et je confirme, ne met pas "" mais string.Empty. Certes, ça revient au même, mais tu respectes les conventions.
          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2011 à 12:40:14

            Citation : gretro


            public string FullPath
                    {
                        get 
                        {
                            if (m_fileInfo == null)
                                return "";
                            else
                                return m_fileInfo.FullName;
                        }
                    }
            



            OU ALORS

            public string FullPath
                    {
                        get 
                        {
                            return m_fileInfo == null ? "" : m_fileInfo.FullName;
                        }
                    }
            



            Bon moi je dirais qu'il y a une erreur de conception... comment peut on demander un fullpath si on n'as pas initialiser un fichier avant?
            Faudrait voir plus de code a mon avis ...

            • Partager sur Facebook
            • Partager sur Twitter
            ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **

            [C#]Opérateur optimisé ou pas ?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown