Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Быстрее или без разницы Добавлено: 10.08.08 17:30  

Автор вопроса:  Skywalker | Web-сайт: iSkywalker.ru | ICQ: 300-70-6пятьЪ 
Есть ли разница в быстройдествии между этими двумя кодами

Private Class Class1
    Private _q As Integer
    Public Property Q() As Integer
        Get
            return _q
        End Get
        Set(ByVal value As Integer)
            _q = value
        End Set
    End Property
End Class

Private Class Class2
    Inherits Class1
    Private w As Integer
    Private Sub ttt()
        w = 5 * Me.Q
    End Sub
End Class

и

Private Class Class1
    Protected q As Integer
End Class

Private Class Class2
    Inherits Class1
    Private w As Integer
    Private Sub ttt()
        w = 5 * q
    End Sub
End Class


есть подозрения, что получить переменную быстрее напрямую, чем через свойство)

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #1
Добавлено: 10.08.08 18:47
я хз... и зачем вы наследуете класс? легче в одном классе все написать, это тоже самое, а через свойство наверно чууууууууууть медленней... на 1000000000000-ой операции наверно будет заметно =)))
Свойства нужно использовать когда это нужно, если например вы НЕ обращаетесь к этой переменной из другого класса, то нужда в этом отпадает. А в нутри класса нужно обращаться на прямую, если конечно в свойстве не идет проверка вводимого результата, тогда нужно через свойство! ой... чет написал много непонятного =) вобщем нужно смотреть по обстоятельствам! вот =)

Ответить

Номер ответа: 2
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 10.08.08 19:02
бггг я не спрашиваю, когда и что нужно, я это и сам знаю, я спрашиваю медленнее или компилятор оптимизирует по уму.

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 10.08.08 20:26
Ну возьми да бенчмарк сделай )

Ответить

Номер ответа: 4
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #4
Добавлено: 10.08.08 21:24
бенчмарк показывает разные результаты в районе от -0.19 до 0.19 (время на 1 метод - время на второй)

так что считаем, что одинаково

Ответить

Номер ответа: 5
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #5 Добавлено: 11.08.08 02:24
есть подозрения, что получить переменную быстрее напрямую, чем через свойство)


Однозначно.

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 11.08.08 04:03
Так ты сколько итераций делаешь для замера времени?

Ответить

Номер ответа: 7
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #7
Добавлено: 11.08.08 08:59
Int16.MaxValue * 40

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 11.08.08 09:52
Теоритически разница должна быть, но если она и будет, то будет минимальна, в таком приближении что зафиксировать ее вряд ли получится, и тем более, она не окажет катастрофического влияния на результат.

На практике оптимизатор JIT "заинлайнит" обращение к свойству, то есть физически обращение через свойство выполняться не будет - будет напрямую идти обращение к полю (то что у него область видимости private на этом этапе уже не имеет никакого значения).

Но инлайн будет выполняться только в том случае если выполняется запуск с настройкой Release и без отладчика (в Visual Studio для этого нужно нажать Ctrl+F5). В режиме отладки оптимизатор не будет работать, инлайн выполняться не будет и работа будет идти через свойство.

Вот результаты бенчмарка которые полностью подтверждают написаное.

Провожу 1000000000 итераций, для каждого варианты было выполнено по 11 заходов, потом взято среднее значение.

Свойство, Debug, запуск под отладчиком:
11.882

Свойство, Release, запуск без отладчика:
0.811

Поле, Debug, запуск под отладчиком:
7.482

Поле, Release, запуск без отладчика:
0.815


Как видишь - со свойством 0.811, с полем 0.815 - результат практическир равный, разница в 4 мс - погрешность оборудования.

Кстати, интересно рассмотреть варианты запуска в DEBUG.

11.882 и 7.482
Если вооружиться знаниями арифметики, можно подсчитать что в режиме Deug накладные расходы на один вызов свойства по сравнению с обращенем к полю - 4.4 наносекунды - я могу тебя заверить что можно найти тысячи способов более эффективной оптимизации, чем сэкономить 4 нс на ухудшении дизайна :)



Ну а что касается дизайна - то безусловно свойство имеет целый ряд преимуществ перед полем.

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 11.08.08 09:55
я хз... и зачем вы наследуете класс? легче в одном классе все написать, это тоже самое, а через свойство наверно чууууууууууть медленней... на 1000000000000-ой операции наверно будет заметно =)))
Свойства нужно использовать когда это нужно, если например вы НЕ обращаетесь к этой переменной из другого класса, то нужда в этом отпадает. А в нутри класса нужно обращаться на прямую, если конечно в свойстве не идет проверка вводимого результата, тогда нужно через свойство! ой... чет написал много непонятного =) вобщем нужно смотреть по обстоятельствам! вот =)

Паша, не нужно рассказывать о том когда применять наследование, свойства, поля, и т.п. если не знаешь что такое наследование, свойства, поля, ООП, шаблоны, дизайн, архитектура и т.п.

PS Странно, твой мега-код ты до сих пор не разместил, неужели проблема с свойствами возникла?

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 13.08.08 07:18
Это хоть кто-то прочитал? Если не интересно я могу не писать...

Ответить

Номер ответа: 11
Автор ответа:
 gvozd



Разработчик Offline Client

Вопросов: 164
Ответов: 1317


 Web-сайт: www.gvozdsoft.com
 Профиль | | #11
Добавлено: 13.08.08 10:07
Я прочитал. Пеши исчо. :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам