2016-12-22 6 views
-7
Private Sub darts_Click(sender As System.Object, e As System.EventArgs) Handles darts.Click 
    For i = 0 To 20 
     MessageBox.Show(i & vbNewLine & i * 2 & vbNewLine & i * 3) 
    Next 

End Sub 

илиКакая из них - лучшая практика/наименее затратная вычислительная?

Private Sub darts2_Click(sender As System.Object, e As System.EventArgs) Handles darts2.Click 
    For i = 0 To 20 
     Dim single_score As Integer = 0 
     Dim double_score As Integer = 0 
     Dim triple_score As Integer = 0 

     single_score = i 
     double_score = i * 2 
     triple_score = i * 3 

     MessageBox.Show(single_score & vbNewLine & double_score & vbNewLine & triple_score) 
    Next 
End Sub 

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

+3

Почему бы вам не пройти тест, чтобы проверить их? Я предполагаю, что они оба скомпилируются с тем же или похожим IL, поэтому они, вероятно, эквивалентны. –

+2

Трудно представить, что показ метели 20 MsgBox для пользователя может когда-либо считаться любой лучшей практикой. Если вы пытаетесь отлаживать значения, используйте 'Debug.Print' или' Console.WriteLine' – Plutonix

+2

. Вы должны иметь возможность написать собственный тест, чтобы определить, что лучше. Если вы ищете более эффективные способы повышения производительности, вы можете задать этот вопрос по адресу http://codereview.stackexchange.com/ – techturtle

ответ

1

Проверьте это в приложении консоли. Удалите такие вещи, как запуск в потоке пользовательского интерфейса и запуск внутри обработчиков событий элементов управления пользовательского интерфейса. Кроме того, акт отображения сообщения огромный накладные расходы, поэтому оставьте его, как это делается в каждом методе. Все, что вы действительно хотите протестировать, - это разница в производительности между определением переменных и назначением вычисленных значений, а также вычислением значений в строке с тремя меньшими переменными.

Добавить секундомер во время обоих методов.

Я также добавил некоторую конфигурацию, чтобы вы могли решить, сколько итераций для тестирования и сколько раз усреднять пробеги, чтобы сгладить результаты.

Dim iterations = Enumerable.Range(1, 16).Select(Function(p) CInt(2^p)) 
Dim averages = 20 
Dim durations As New Dictionary(Of Integer, Dictionary(Of Integer, Double))() 
For Each iteration In iterations 
    Dim d As New Dictionary(Of Integer, Double)() 
    Dim sw As New System.Diagnostics.Stopwatch() 
    sw.Start() 
    For a = 1 To averages 
     For i = 0 To iteration - 1 
      Dim s = i & vbNewLine & i * 2 & vbNewLine & i * 3 
     Next 
    Next 
    sw.Stop() 
    d.Add(1, sw.ElapsedMilliseconds/averages) 
    sw.Restart() 
    For a = 1 To averages 
     For i = 0 To iteration - 1 
      Dim single_score As Integer = 0 
      Dim double_score As Integer = 0 
      Dim triple_score As Integer = 0 
      single_score = i 
      double_score = i * 2 
      triple_score = i * 3 
      Dim s = single_score & vbNewLine & double_score & vbNewLine & triple_score 
     Next 
    Next 
    sw.Stop() 
    d.Add(2, sw.ElapsedMilliseconds/averages) 
    durations.Add(iteration, d) 
Next 
For Each iteration In iterations 
    Console.WriteLine("Number of iterations: {0}", iteration) 
    Console.WriteLine("Method 1: {0:0.0} ms", durations(iteration)(1)) 
    Console.WriteLine("Method 2: {0:0.0} ms", durations(iteration)(2)) 
Next 
Console.ReadLine() 

Они являются в значительной степени тот же

Число итераций: 2
Метод 1: 0.0 мс
Метод 2: 0.0 мс
Число итераций: 4
Метод 1: 0,0 мс
Способ 2: 0,0 мс
Число итераций: 8
Способ 1: 0 .0 мс
Метод 2: 0.0 мс
Число итераций: 16
Метод 1: 0.0 мс
Метод 2: 0.0 мс
Число итераций: 32
Метод 1: 0.0 мс
Способ 2: 0.0 мс
Число итераций: 64
Метод 1: 0,1 мс
Способ 2: 0,1 мс
Количество итераций: 128
Метод 1: 0,1 мс
Способ 2: 0,4 мс
Количество итераций: 256
Метод 1: 0,3 мс
Способ 2: 0,2 мс
Число итераций: 512
Метод 1: 0,6 мс
Способ 2: 0,4 мс
Число итераций: 1024
Метод 1: 0,7 мс
Способ 2: 0,7 мс
Число итераций: 2048
Метод 1: 1,5 мс
Способ 2: 1,1 мс
Число итераций: 4096
Способ 1: 2,2 мс
Способ 2: 2.2 мс
Количество итераций: 8192
Метод 1: 4,3 мс
Способ 2: 3,5 мс
Число итераций: 16384
Метод 1: 6,7 мс
Способ 2: 6,7 мс
Число итераций: 32768
Метод 1: 13,7 мс
Способ 2: 13,4 мс
Число итераций: 65536
Метод 1: 28,7 мс
Способ 2: 29,0 мс

 Смежные вопросы

  • Нет связанных вопросов^_^