powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что быстрее if-if или if-else-if?
21 сообщений из 21, страница 1 из 1
Что быстрее if-if или if-else-if?
    #38551834
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример1
if (a == 1) {код1}
else if (a == 2) {код2}
else if (a == 3) {код3}

Пример2
if (a == 1) {код1}
if (a == 2) {код2}
if (a == 3) {код3}
Какой пример выполнится быстрее?
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38551841
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Какой пример выполнится быстрее?switch ))
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38551842
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если а=1 или 2, то первый, если 3, то пофиг. Надо объяснять почему?
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38551845
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Prowebber81Какой пример выполнится быстрее?switch ))Да.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38551876
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
if-else по скорости равно switch (в случае если а=1)
я правильно понял?
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38551937
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81if-else по скорости равно switch (в случае если а=1)
я правильно понял?
Надо IL код открывать. И смотреть там.
Думаю, что режим компиляции (debug - release) может повлиять...
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38551976
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81Пример1
if (a == 1) {код1}
else if (a == 2) {код2}
else if (a == 3) {код3}

Пример2
if (a == 1) {код1}
if (a == 2) {код2}
if (a == 3) {код3}
Какой пример выполнится быстрее?
Пример2 быстрее, если там стоит ретурн в коде. Копеешное дело. Не стòит на это внимание обращать.
Вообще-то это очень зависит от умения программировать, а не по формальным признакам.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552333
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge Не стòит на это внимание обращать.
Вообще-то это очень зависит от умения программировать, а не по формальным признакам.
+1

Есть две важные вещи - время процессора и время программиста.
Задача позитивного программиста - писать понятный код. Это экономит его время и время тех, кто будет поддреживать его код потом.
В редких случаях - время процессора важнее, и тогда надо писать максимально оптимальный код.
В большинстве случаев достаточно уметь решать проблему "умножения таблиц" - и никаких проблем с производительностью не возникнет.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552367
фиганыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81,

"быстрее" в дотнете? ну-ну
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552415
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,
А не чё что это два разных кода, даже по логике исполнения
первый пример.

if (a == 1) {код1}
else if (a == 2) {код2}
else if (a == 3) {код3}
это единый блок кода если а==1 код1 исполняется и безусловным переходом вышвыривается за за блок в низ ( что там у нас..)

а

Пример2
if (a == 1) {код1}
if (a == 2) {код2}
if (a == 3) {код3}
это три блока и если первый исполняется то остальные будит дубасится все равно..

мало того пример 2 подвержен трудно уловимым багам в логике.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552561
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По моему в экзамплах

if (a == 1) {код1}
else if (a == 2) {код2}
else if (a == 3) {код3}

и

switch(a)
case 1: {код1} break;
case 2: {код2} break;
case 3: {код3} break;

по очереди проверяются все условия, пока не дойдем до нужного.
После этого выполняется один соответствующий кодовый блок
То есть, оба экзампла должны выполняться абсолютно идентично.
Я прав?
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552568
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ждем очередного громкого расследования по поводу, что быстрее for или foreach !

Оставайтесь на связи!
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552570
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл повыеживаться на последок: на самом деле ничто не быстрее - это макароны, и уже с запахом.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552596
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81То есть, оба экзампла должны выполняться абсолютно идентично.
Я прав?D129 сказал умную вещь: нужно смотреть IL-код. Но в VB6 тесты показывали большую скорость case'ов, чем else if. От этого у нас с Шокером остался стереотип :)
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38552981
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил таки сравнить case и else if под дотнетом.
говнокод, я знаю
Код: c#
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.
 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim d As Date = Now
        Dim r As Integer
        For x = 1 To 1000000000
            r = x Mod 9
            If r = 0 Then
                dummy()
            ElseIf r = 1 Then
                dummy()
            ElseIf r = 2 Then
                dummy()
            ElseIf r = 3 Then
                dummy()
            ElseIf r = 4 Then
                dummy()
            ElseIf r = 5 Then
                dummy()
            ElseIf r = 6 Then
                dummy()
            ElseIf r = 7 Then
                dummy()
            ElseIf r = 8 Then
                dummy()
            End If
        Next
        MsgBox(DateDiff(DateInterval.Second, d, Now))
        d = Now
        For x = 1 To 1000000000
            r = x Mod 9
            Select Case r
                Case 0
                    dummy()
                Case 1
                    dummy()
                Case 2
                    dummy()
                Case 3
                    dummy()
                Case 4
                    dummy()
                Case 5
                    dummy()
                Case 6
                    dummy()
                Case 7
                    dummy()
                Case 8
                    dummy()
            End Select
        Next
        MsgBox(DateDiff(DateInterval.Second, d, Now))
    End Sub

    Private Sub dummy()

    End Sub

Под дебаггером результат 16 секунд у elseif против 9 у case, при запуске exe 14 против 12. Elseif по-прежнему немного отстает (на 15%), и в алгоритмах, чувствительных к экономии на спичках, будет все же полезнее.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38553127
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чудеса... D129 написал уже dsit.

Вы посмотрите во что превращается код в IL, в частности, как там раскручиются if else, а потом будете сравнивать
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38553232
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81,

Без дизассембля-ции тут никак не обойтись!
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38553241
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Надо IL код открывать. И смотреть там. Блин, я не был первым капитаном. Тоска-пичаль.
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38554907
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому интересно поразбираться, так скажем, опытные образцы:
Код VB.NET (Компилятор VB.NET 11.0.50709.17929 из VS 2012 Express .NET 4.5)
Код: vbnet
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.
Module Module1
    Sub Main()
        Dim d As Date = Now
        Dim r As Integer

        d = Now
        For x = 1 To 1000000000
            r = x Mod 9

            Select Case r
                Case 0
                    Dummy()
                Case 1
                    Dummy()
                Case 2
                    Dummy()
                Case 3
                    Dummy()
                Case 4
                    Dummy()
                Case 5
                    Dummy()
                Case 6
                    Dummy()
                Case 7
                    Dummy()
                Case 8
                    Dummy()
            End Select
        Next
        Console.WriteLine(DateDiff(DateInterval.Second, d, Now))

        For x = 1 To 1000000000
            r = x Mod 9
            If r = 0 Then
                Dummy()
            ElseIf r = 1 Then
                Dummy()
            ElseIf r = 2 Then
                Dummy()
            ElseIf r = 3 Then
                Dummy()
            ElseIf r = 4 Then
                Dummy()
            ElseIf r = 5 Then
                Dummy()
            ElseIf r = 6 Then
                Dummy()
            ElseIf r = 7 Then
                Dummy()
            ElseIf r = 8 Then
                Dummy()
            End If
        Next
        Console.WriteLine(DateDiff(DateInterval.Second, d, Now))

        Console.ReadLine()
    End Sub

    Sub Dummy()

    End Sub

End Module

Дизассемблированный код через ILSpy 2.1.0.1603 в виде VB кода
Код: vbnet
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.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
' ConsoleApplication3.Module1
<STAThread()>
Public Shared Sub Main()
	Dim d As DateTime = DateAndTime.Now
	d = DateAndTime.Now
	Dim x As Integer = 1
	' The following expression was wrapped in a checked-statement
	Dim arg_A4_0 As Integer
	Dim num As Integer
	Do
		Select Case x Mod 9
			Case 0
				Module1.Dummy()
			Case 1
				Module1.Dummy()
			Case 2
				Module1.Dummy()
			Case 3
				Module1.Dummy()
			Case 4
				Module1.Dummy()
			Case 5
				Module1.Dummy()
			Case 6
				Module1.Dummy()
			Case 7
				Module1.Dummy()
			Case 8
				Module1.Dummy()
		End Select
		x += 1
		arg_A4_0 = x
		num = 1000000000
	Loop While arg_A4_0 <= num
	Console.WriteLine(DateAndTime.DateDiff(DateInterval.Second, d, DateAndTime.Now, FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1))
	Dim x2 As Integer = 1
	Dim arg_178_0 As Integer
	Do
		Dim r As Integer = x2 Mod 9
		Dim flag As Boolean = r = 0
		If flag Then
			Module1.Dummy()
		Else
			flag = (r = 1)
			If flag Then
				Module1.Dummy()
			Else
				flag = (r = 2)
				If flag Then
					Module1.Dummy()
				Else
					flag = (r = 3)
					If flag Then
						Module1.Dummy()
					Else
						flag = (r = 4)
						If flag Then
							Module1.Dummy()
						Else
							flag = (r = 5)
							If flag Then
								Module1.Dummy()
							Else
								flag = (r = 6)
								If flag Then
									Module1.Dummy()
								Else
									flag = (r = 7)
									If flag Then
										Module1.Dummy()
									Else
										flag = (r = 8)
										If flag Then
											Module1.Dummy()
										End If
									End If
								End If
							End If
						End If
					End If
				End If
			End If
		End If
		x2 += 1
		arg_178_0 = x2
		num = 1000000000
	Loop While arg_178_0 <= num
	Console.WriteLine(DateAndTime.DateDiff(DateInterval.Second, d, DateAndTime.Now, FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1))
	Console.ReadLine()
End Sub

Дизассемблированный код в виде IL кода
Код: vbnet
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.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
.method public static 
	void Main () cil managed 
{
	.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = (
		01 00 00 00
	)
	// Method begins at RVA 0x2108
	// Code size 410 (0x19a)
	.maxstack 5
	.entrypoint
	.locals init (
		[0] valuetype [mscorlib]System.DateTime d,
		[1] int32 r,
		[2] int32 x,
		[3] int32 x,
		[4] int32 VB$t_i4$L0,
		[5] int32 VB$CG$t_i4$S0,
		[6] bool VB$CG$t_bool$S0
	)

	IL_0000: nop
	IL_0001: call valuetype [mscorlib]System.DateTime [Microsoft.VisualBasic]Microsoft.VisualBasic.DateAndTime::get_Now()
	IL_0006: stloc.0
	IL_0007: call valuetype [mscorlib]System.DateTime [Microsoft.VisualBasic]Microsoft.VisualBasic.DateAndTime::get_Now()
	IL_000c: stloc.0
	IL_000d: ldc.i4.1
	IL_000e: stloc.2
	// loop start (head: IL_000f)
		IL_000f: ldloc.2
		IL_0010: ldc.i4.s 9
		IL_0012: rem
		IL_0013: stloc.1
		IL_0014: nop
		IL_0015: ldloc.1
		IL_0016: stloc.s VB$CG$t_i4$S0
		IL_0018: ldloc.s VB$CG$t_i4$S0
		IL_001a: switch (IL_0045, IL_004e, IL_0057, IL_0060, IL_0069, IL_0072, IL_007b, IL_0084, IL_008d)

		IL_0043: br.s IL_0094

		IL_0045: nop
		IL_0046: call void ConsoleApplication3.Module1::Dummy()
		IL_004b: nop
		IL_004c: br.s IL_0094

		IL_004e: nop
		IL_004f: call void ConsoleApplication3.Module1::Dummy()
		IL_0054: nop
		IL_0055: br.s IL_0094

		IL_0057: nop
		IL_0058: call void ConsoleApplication3.Module1::Dummy()
		IL_005d: nop
		IL_005e: br.s IL_0094

		IL_0060: nop
		IL_0061: call void ConsoleApplication3.Module1::Dummy()
		IL_0066: nop
		IL_0067: br.s IL_0094

		IL_0069: nop
		IL_006a: call void ConsoleApplication3.Module1::Dummy()
		IL_006f: nop
		IL_0070: br.s IL_0094

		IL_0072: nop
		IL_0073: call void ConsoleApplication3.Module1::Dummy()
		IL_0078: nop
		IL_0079: br.s IL_0094

		IL_007b: nop
		IL_007c: call void ConsoleApplication3.Module1::Dummy()
		IL_0081: nop
		IL_0082: br.s IL_0094

		IL_0084: nop
		IL_0085: call void ConsoleApplication3.Module1::Dummy()
		IL_008a: nop
		IL_008b: br.s IL_0094

		IL_008d: nop
		IL_008e: call void ConsoleApplication3.Module1::Dummy()
		IL_0093: nop

		IL_0094: nop
		IL_0095: nop
		IL_0096: ldloc.2
		IL_0097: ldc.i4.1
		IL_0098: add.ovf
		IL_0099: stloc.2
		IL_009a: ldloc.2
		IL_009b: ldc.i4 1000000000
		IL_00a0: stloc.s VB$CG$t_i4$S0
		IL_00a2: ldloc.s VB$CG$t_i4$S0
		IL_00a4: ble IL_000f
	// end loop
	IL_00a9: ldc.i4.s 9
	IL_00ab: ldloc.0
	IL_00ac: call valuetype [mscorlib]System.DateTime [Microsoft.VisualBasic]Microsoft.VisualBasic.DateAndTime::get_Now()
	IL_00b1: ldc.i4.1
	IL_00b2: ldc.i4.1
	IL_00b3: call int64 [Microsoft.VisualBasic]Microsoft.VisualBasic.DateAndTime::DateDiff(valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.DateInterval, valuetype [mscorlib]System.DateTime, valuetype [mscorlib]System.DateTime, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.FirstDayOfWeek, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.FirstWeekOfYear)
	IL_00b8: call void [mscorlib]System.Console::WriteLine(int64)
	IL_00bd: nop
	IL_00be: ldc.i4.1
	IL_00bf: stloc.3
	// loop start (head: IL_00c0)
		IL_00c0: ldloc.3
		IL_00c1: ldc.i4.s 9
		IL_00c3: rem
		IL_00c4: stloc.1
		IL_00c5: ldloc.1
		IL_00c6: ldc.i4.0
		IL_00c7: ceq
		IL_00c9: stloc.s VB$CG$t_bool$S0
		IL_00cb: ldloc.s VB$CG$t_bool$S0
		IL_00cd: brfalse.s IL_00da

		IL_00cf: call void ConsoleApplication3.Module1::Dummy()
		IL_00d4: nop
		IL_00d5: br IL_0168

		IL_00da: ldloc.1
		IL_00db: ldc.i4.1
		IL_00dc: ceq
		IL_00de: stloc.s VB$CG$t_bool$S0
		IL_00e0: ldloc.s VB$CG$t_bool$S0
		IL_00e2: brfalse.s IL_00ec

		IL_00e4: call void ConsoleApplication3.Module1::Dummy()
		IL_00e9: nop
		IL_00ea: br.s IL_0168

		IL_00ec: ldloc.1
		IL_00ed: ldc.i4.2
		IL_00ee: ceq
		IL_00f0: stloc.s VB$CG$t_bool$S0
		IL_00f2: ldloc.s VB$CG$t_bool$S0
		IL_00f4: brfalse.s IL_00fe

		IL_00f6: call void ConsoleApplication3.Module1::Dummy()
		IL_00fb: nop
		IL_00fc: br.s IL_0168

		IL_00fe: ldloc.1
		IL_00ff: ldc.i4.3
		IL_0100: ceq
		IL_0102: stloc.s VB$CG$t_bool$S0
		IL_0104: ldloc.s VB$CG$t_bool$S0
		IL_0106: brfalse.s IL_0110

		IL_0108: call void ConsoleApplication3.Module1::Dummy()
		IL_010d: nop
		IL_010e: br.s IL_0168

		IL_0110: ldloc.1
		IL_0111: ldc.i4.4
		IL_0112: ceq
		IL_0114: stloc.s VB$CG$t_bool$S0
		IL_0116: ldloc.s VB$CG$t_bool$S0
		IL_0118: brfalse.s IL_0122

		IL_011a: call void ConsoleApplication3.Module1::Dummy()
		IL_011f: nop
		IL_0120: br.s IL_0168

		IL_0122: ldloc.1
		IL_0123: ldc.i4.5
		IL_0124: ceq
		IL_0126: stloc.s VB$CG$t_bool$S0
		IL_0128: ldloc.s VB$CG$t_bool$S0
		IL_012a: brfalse.s IL_0134

		IL_012c: call void ConsoleApplication3.Module1::Dummy()
		IL_0131: nop
		IL_0132: br.s IL_0168

		IL_0134: ldloc.1
		IL_0135: ldc.i4.6
		IL_0136: ceq
		IL_0138: stloc.s VB$CG$t_bool$S0
		IL_013a: ldloc.s VB$CG$t_bool$S0
		IL_013c: brfalse.s IL_0146

		IL_013e: call void ConsoleApplication3.Module1::Dummy()
		IL_0143: nop
		IL_0144: br.s IL_0168

		IL_0146: ldloc.1
		IL_0147: ldc.i4.7
		IL_0148: ceq
		IL_014a: stloc.s VB$CG$t_bool$S0
		IL_014c: ldloc.s VB$CG$t_bool$S0
		IL_014e: brfalse.s IL_0158

		IL_0150: call void ConsoleApplication3.Module1::Dummy()
		IL_0155: nop
		IL_0156: br.s IL_0168

		IL_0158: ldloc.1
		IL_0159: ldc.i4.8
		IL_015a: ceq
		IL_015c: stloc.s VB$CG$t_bool$S0
		IL_015e: ldloc.s VB$CG$t_bool$S0
		IL_0160: brfalse.s IL_0168

		IL_0162: call void ConsoleApplication3.Module1::Dummy()
		IL_0167: nop

		IL_0168: nop
		IL_0169: nop
		IL_016a: ldloc.3
		IL_016b: ldc.i4.1
		IL_016c: add.ovf
		IL_016d: stloc.3
		IL_016e: ldloc.3
		IL_016f: ldc.i4 1000000000
		IL_0174: stloc.s VB$CG$t_i4$S0
		IL_0176: ldloc.s VB$CG$t_i4$S0
		IL_0178: ble IL_00c0
	// end loop
	IL_017d: ldc.i4.s 9
	IL_017f: ldloc.0
	IL_0180: call valuetype [mscorlib]System.DateTime [Microsoft.VisualBasic]Microsoft.VisualBasic.DateAndTime::get_Now()
	IL_0185: ldc.i4.1
	IL_0186: ldc.i4.1
	IL_0187: call int64 [Microsoft.VisualBasic]Microsoft.VisualBasic.DateAndTime::DateDiff(valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.DateInterval, valuetype [mscorlib]System.DateTime, valuetype [mscorlib]System.DateTime, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.FirstDayOfWeek, valuetype [Microsoft.VisualBasic]Microsoft.VisualBasic.FirstWeekOfYear)
	IL_018c: call void [mscorlib]System.Console::WriteLine(int64)
	IL_0191: nop
	IL_0192: call string [mscorlib]System.Console::ReadLine()
	IL_0197: pop
	IL_0198: nop
	IL_0199: ret
} // end of method Module1::Main


Как видно для Switch конструкции есть спец оператор в IL, который оптимально реализует условие
Код: c#
1.
IL_001a: switch (IL_0045, IL_004e, IL_0057, IL_0060, IL_0069, IL_0072, IL_007b, IL_0084, IL_008d)


А вот If-Then-Else в некую кашу нагенерировалось, довольно неплохо, но проскакивают операции чтения/записи в стек, которые скорее всего и тормозят.
Код: vbnet
1.
2.
IL_014a: stloc.s VB$CG$t_bool$S0
IL_014c: ldloc.s VB$CG$t_bool$S0
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38556666
webber81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyПод дебаггером результат 16 секунд у elseif против 9 у case, при запуске exe 14 против 12. Elseif по-прежнему немного отстает (на 15%), и в алгоритмах, чувствительных к экономии на спичках, будет все же полезнее.

То есть получаетcя что switch под дебагером быстрее чем из exe?
Такое разве может быть?
...
Рейтинг: 0 / 0
Что быстрее if-if или if-else-if?
    #38556736
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
webber81AntonariyПод дебаггером результат 16 секунд у elseif против 9 у case, при запуске exe 14 против 12. Elseif по-прежнему немного отстает (на 15%), и в алгоритмах, чувствительных к экономии на спичках, будет все же полезнее.

То есть получаетcя что switch под дебагером быстрее чем из exe?
Такое разве может быть?Станиславский в треде! :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Что быстрее if-if или if-else-if?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]