2012-12-05 9 views
5

Ich weiß, Switch-Anweisungen sind nicht verfügbar in CodeDom und wie Compiler mit Switch-Anweisung umgehen.Switch-Anweisung in CodeDom (Jump-Tabelle Stil)

So aus Leistungsgründen, wenn viele Fälle vorhanden sind, möchte ich nicht verwenden, wenn-sonst
Why the switch statement and not if-else?

Ist ist möglich, Code zu generieren für einen bestimmten Fall Liste eine Sprungtabelle zu simulieren.

switch(value) { 
    case 0: return Method0(); 
    case 1: return Method1(); 
    case 4; return Method4(); 
} 

Würde produzieren:

private delegate object Method(); 

    Method[] _jumpTable = new Method[] { Method0, Method1, null, null, Method4 }; 

    private object GetValue(int value) 
    { 
     if (value < 0 || value > 4) 
      return null; 
     return _jumpTable[value](); 
    } 

Was ist der beste Weg, um die Terminliste und erzeugt ein Array zu analysieren, ob es Löcher in der Sequenz oder die Liste ist spärlich?

Antwort

2

Für die Code-Analyse können Sie sich The Roslyn Project ansehen. Wenn die Tabelle groß und besonders spärlich ist, dann sollte/else besser sein (bei modernen CPU-Caches). Roslyn sollte Sie das DOM laufen lassen und die Fallwerte erfassen lassen, die dann sortiert werden können (vielleicht in einem einzigen Link). Ich glaube, du meinst "Pause" in deinem Schalter oben. Wenn Sie so etwas implementieren, würde ich es sehr sorgfältig testen, um sicherzustellen, dass es tatsächlich die Leistung verbessert.

Verwandte Themen