Страница: 1 |
Страница: 1 |
Вопрос: Быстрее или без разницы
Добавлено: 10.08.08 17:30
Автор вопроса: Skywalker | Web-сайт:
Есть ли разница в быстройдествии между этими двумя кодами
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-сайт:
Профиль | | #2
Добавлено: 10.08.08 19:02
бггг я не спрашиваю, когда и что нужно, я это и сам знаю, я спрашиваю медленнее или компилятор оптимизирует по уму.
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 10.08.08 20:26
Ну возьми да бенчмарк сделай )
Номер ответа: 4
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #6
Добавлено: 11.08.08 04:03
Так ты сколько итераций делаешь для замера времени?
Номер ответа: 7
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #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 заходов, потом взято среднее значение.
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
Свойства нужно использовать когда это нужно, если например вы НЕ обращаетесь к этой переменной из другого класса, то нужда в этом отпадает. А в нутри класса нужно обращаться на прямую, если конечно в свойстве не идет проверка вводимого результата, тогда нужно через свойство! ой... чет написал много непонятного вобщем нужно смотреть по обстоятельствам! вот
Паша, не нужно рассказывать о том когда применять наследование, свойства, поля, и т.п. если не знаешь что такое наследование, свойства, поля, ООП, шаблоны, дизайн, архитектура и т.п.
PS Странно, твой мега-код ты до сих пор не разместил, неужели проблема с свойствами возникла?
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 13.08.08 07:18
Это хоть кто-то прочитал? Если не интересно я могу не писать...
Номер ответа: 11
Автор ответа:
gvozd
Разработчик Offline Client
Вопросов: 164
Ответов: 1317
Web-сайт:
Профиль | | #11
Добавлено: 13.08.08 10:07
Я прочитал. Пеши исчо.