Quizfrage: was ist schneller "if" oder "?"

CongoFX

Grünschnabel
Hallo Leute,

hat mich schon immer Interessiert, vielleicht hat jemand eine wirklich aussagekräftige Antwort:

Quizfrage:

Was ist während der Laufzeit schneller, eine Bedingung mit dem if keyword:

Code:
if (x == 1)
{
y = 2;
}
else
{
y = 3;
}

oder mit dem ? operator:

Code:
y = x == 1 ? 2 : 3;
 
Trotz dessen, dass ich mich mit .NET nicht so auskenne, gehe ich von jeder anderen, mir bekannten Programmiersprache aus:
Im übersetzten Maschinencode sind beide Aufrufe identisch. Einziger Unterschied sollte der höhere Zeichenaufwand im Quellcode beim Compilieren sein, wenn man die if-else Version benutzt ;)
 
Hi

Es macht einen Zeitlichen Unterschied, der jedoch sich erst bei der Masse bemerkbar macht.
Den kann man auch ganz leicht selbst herausfinden.
C#:
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            int res = 0;
            watch.Start();
            for (int i = 0; i < 100000000; i++)
            {
                if (i % 2 == 0)
                {
                    res = 1;
                }
                else
                {
                    res = 2;
                }
            }
            watch.Stop();
            Console.WriteLine("if: {0}", watch.Elapsed);
            watch.Reset();
            watch.Start();
            for (int i = 0; i < 100000000; i++)
            {
                res = i % 2 == 0 ? 1 : 2;
            }
            watch.Stop();
            Console.WriteLine("?: {0}", watch.Elapsed);
            Console.ReadLine();
        }
    }
}
Ergebnis:
if: 00:00:01.0751218
?: 00:00:00.5535929
 
Grundsätzlich:

Ob if oder ? ist wohl eher vom Einsatzgebiet abhängig. Hier die Frage nach der Performance zu stellen ist eher sinnfrei. Zudem ist für 100000000 Durchläufe der Unterschied so marginal, dass er vernachlässigt werden kann.

Wer sich zudem den IL Code ansieht wird bemerken, dass dieser für beide Varianten identisch ist. Ergo, von der Aufgabenstellung abhängig machen und nicht von der Performance.
 
Zurück