![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
SANCHO123 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 25.5.2008 Репутация: нет Всего: нет |
Добрый день!
Есть класс:
Так вот вызовы Detail.get_W() и Detail.get_L() занимают около 40% времени выполнения функции (по данным анализа производительности VS 2010). Почему? Разве проверка условия такая тяжелая операция? В функции есть множество операций сортировки и создания больших массивов и они занимают меньше времени. Удалил get/set. Сделал так:
Функция стала выполняться в 5 раз быстрее, но потерял нужную функциональность. |
||||
|
|||||
infarch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 13.3.2009 Репутация: 1 Всего: 1 |
Немного не по теме, но... почему так: "if (Rotate == true)" , не проще ли "if (Rotate)" ?
|
|||
|
||||
Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
дело не в проверке, а в том что достук к переменной происходит быстрее, чем к свойству. фактически каждое свойство в MSIL выглядят как два метода (аля get и set), так что обращаясь к свойству на самом деле идет вызов метода, что выполняется дольше. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 92 |
Я не сильно в курсе как происходит анализ производительности в VS 2010, но есть предположение, что проблема может быть в нём.
Грубо говоря, если метод или свойство очень простые, то время, затрачиваемое на замер производительности может оказаться даже больше, чем время выполнения полезного кода. Для доступа к переменным в то же время никаких замеров не происходит. Это распространённая проблема в профайлерах, поэтому такие простые методы обычно исключаются из анализа. Но я могу быть не прав. Вообще быстродействие было бы хорошо сравнить без профайлера и в режиме Release. Там тоже в 5 раз разница? -------------------- Да. Именно так. |
|||
|
||||
eugene123 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 1.8.2011 Репутация: нет Всего: нет |
код
можно заменить
и сравнить а вообще, как заметил Дрон, в таких случаях лучше не использовать профайлер, а попробовать, например, обойтись классом Stopwatch |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |