В VB. net, что быстрее "если х = ложь" или "если не х" - PullRequest
0 голосов
/ 02 февраля 2020

Все,

В VB. net Я обычно тестирую сценарий True или False, как показано ниже:

' dict is a dictionary
If dict.ContainsKey(anID) = False Then
   ' Do something
End If

Я знаю, что этот тест также можно записать так:

' dict is a dictionary
If not dict.ContainsKey(anID) Then
   ' Do something
End If

Я часто задавался вопросом, быстрее ли один подход, чем другой? Я искал Inte rnet, но не смог найти никакого сравнения двух подходов. Я склонен использовать первый пример, так как считаю, что его легче читать, но если у кого-то есть доказательства того, что второй подход быстрее, мне было бы интересно услышать. Обычно они встроены в циклы, которые могут повторяться тысячи раз, поэтому я думаю, что в этом случае я бы поставил производительность выше разборчивости.

1 Ответ

1 голос
/ 03 февраля 2020

Они выдали один и тот же промежуточный код через ildasm.

Вот код, который я пробовал:

Sub Main()
    Dim x As Boolean
    If x = False Then
        Console.WriteLine("hello world")
    End If
End Sub

и этот второй код

Sub Main()
    Dim x As Boolean
    If Not x Then
        Console.WriteLine("hello world")
    End If
End Sub

Оба производят это

.method public static void  Main() cil managed
{
  .entrypoint
  .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 ) 
  // Code size       23 (0x17)
  .maxstack  2
  .locals init ([0] bool x,
           [1] bool V_1)
  IL_0000:  nop
  IL_0001:  ldloc.0
  IL_0002:  ldc.i4.0
  IL_0003:  ceq
  IL_0005:  stloc.1
  IL_0006:  ldloc.1
  IL_0007:  brfalse.s  IL_0015
  IL_0009:  ldstr      "hello world"
  IL_000e:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0013:  nop
  IL_0014:  nop
  IL_0015:  nop
  IL_0016:  ret
} // end of method Module1::Main
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...