DEt er ufatteligt svært at svare på... nogle compilere kan aggresivt optimerer til at skifte mellem begge typer efter hvad der er smartest....
hvis dine case sætninger er noget med case 1, case 2, case 3 ... case n - vil de fleste compilere lave en lookup table (LUT), som nok er noget af det hurtigste..
ellers vil den lave en tabel med jump's for det pågældende index... hvis det er mere hensigts mæssig..
med if kan du få en temlig go "hit rate" hvis du har en idé om hvilke forekomster der kommer flest af... så sætter man dem forrest i rækken...
altså hvis man ved at (i dette tilfælde) at a oftest bliver = 100, næsten lige så tit 44 etc...
kunne man skrive
if(a==100) do_something();
else if(a==44) do_somethin_else();
else if
..
..
og så have mindre og mindre betydningsfulde værdier i hierakisk orden.... jo før if'en fanger værdien, desto hurtigere kode, mindre if'er udført... og med else if - shortcircut'er man så der ikke bliver udført flere unødvendige compares.
men hvis man skal fange værdier i niveauer.. mellem 0 og 99, 100 og 199, 200 og 299 så er if smartest.. det kan man faktisk slet ikke med en switch (uden at lave ufattelig mange follow through - case uden break)
der kommer if's styrke. alt efter om man regner med at der kommer flest store eller små tal, if'er man nede eller oppe fra....
if(a<100) mellem0og99();
else if(a<200) mellem100og199();
else if......
her kunne man lave et trick og lave en division, så ens værdier bliver noget med 0,1,2,3,.... og så ville switch være bedst at bruge igen

MVH'
Daniel