Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2015, 15:40   #1
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию Как посмотреть, что в коде тормозит больше всего

Я писал код на строках, и теперь переделал часть на int. Несмотря на это, я еще не могу сделать так, чтобы код не лагал. У меня окно должно обновляться по таймеру раз в 100мс, а в действительности это происходит за 500мс.

Я думаю, программа, где есть вывод на графики, ОБПФ, куча бинарных данных, может работать быстрее. В идеале мне нужно, чтобы обработка шла менее 5 мс, так что вопрос очень важный. Подскажите, пожалуйста, как можно протестировать программу на тормознутость, найти, что сильнее всего отвисает?
Krasi вне форума Ответить с цитированием
Старый 09.11.2015, 15:55   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
окно должно обновляться по таймеру
В таймере настолько много кода, что непонятно что может тормозить?

Ну можно профайлер запустить. Если код нормально разбит на функции, а не одна на 100500 строк.
Например, тот, что в студии есть.

Или DotTrace.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 11:27   #3
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Пока не сильно понял, то ли я снял. Но посмотрите, это же относительные времена выполнения функций программы в процентах?
Изображения
Тип файла: jpg Безымянный.jpg (22.7 Кб, 122 просмотров)
Krasi вне форума Ответить с цитированием
Старый 10.11.2015, 11:35   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А чего непонятного? Ну видимо это IQconv и занимает кучу времени )

Про время, если не нравится в виде %, то по кнопке на скриншоте выше можно настроить чтоб другие варианты были (скорее всего Instrumental вместо Sampling надо выбрать)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 14:11   #5
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Если только IQconv - это лишь часть функции. Поэтому чьто нитакь?

Код:
double IQconv(int X)
        {
            double Y = (double)int.Parse(X.ToString());
            if (Y == 1) Y = -1;
            if (Y == 2) Y = -0.707;
            if (Y == 3) Y = 0;
            if (Y == 4) Y = 0.707;
            if (Y == 5) Y = 1;
            return Y;
        }
Я предполагаю, что это из-за int.Parse и из-за стрингового формата. Ну конечно, я исправил это (double)int.Parse(X.ToString()) на (double)X. Но может Вы больше знаете? А программка-то быстрее стала, но все-равно лагает заметно. Может есть еще идеи судя по логу?

Последний раз редактировалось Krasi; 10.11.2015 в 14:14.
Krasi вне форума Ответить с цитированием
Старый 10.11.2015, 14:14   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А оставшаяся часть функции?)

Ну видимо она вызывается 100500 раз, и в ней 10050 if'ов.

А зачем такое извращение с if'ами? Сделайте массив и берите элемент myArray[X-1]
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.11.2015 в 14:19.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 14:20   #7
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Вот новая версия лога, если что. То-есть, видимо, он не выдает того, что мне нужно, и все спихивает на таймер. Хотя проблема в том, что у таймера выставлено 1мс, а программа обновляется каждые 300мс, примерно. Что можно сделать? Вообще я вижу еще OFDM_spec. Эта функция действительно работает не быстро, и я могу ее показать, если Вы ответите, что она тоже тормозит у меня действительно
Изображения
Тип файла: jpg Безымянный.jpg (25.0 Кб, 120 просмотров)
Krasi вне форума Ответить с цитированием
Старый 10.11.2015, 15:02   #8
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Я попробую сделать массив. А это разве хуже вызывать функцию 150 раз чем 150 элементов прогнать в виде массива разом через функцию?
Krasi вне форума Ответить с цитированием
Старый 10.11.2015, 15:16   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что-то не понял про 150 вызовов.
150 таких if'ов (каждый раз при вызове функции) точно медленнее, чем массив из 150 элементов созданный один раз потому что для доступа к 75-ому элементу массива выполняется примерно только одно действие, а не 75. Массив же это один кусок памяти, поэтому не надо никуда долго ходить для поиска 75-того элемента, можно просто взять <размер_элемента> байтов начиная с позиции 75*<размер_элемента>.
Насколько значительно не знаю.
Ну и вообще неудобно ж так код писать, копипаст не рулит

А зачем 1мс если 300мс надо?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 15:18   #10
Krasi
Форумчанин
 
Регистрация: 12.02.2010
Сообщений: 787
По умолчанию

Тогда подскажите, мне надо в IQconv сравнить каждый элемент массива. Если я в функцию отправляю массив длины 150, то мне все равно надо делать for в самой функции, и будет куча if и тп. Или как? Есть путь проще? Или все верно? Я просто делаю массив, столько же if, но это будет обращение к одному кусочку памяти и будет происходить намного быстрее?

Последний раз редактировалось Krasi; 10.11.2015 в 15:31.
Krasi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы.Найти раздел, в котором больше всего книг Camelot_2012 Паскаль, Turbo Pascal, PascalABC.NET 3 14.06.2012 13:25
Определить cлово, в котором больше всего гласных букв. [Алёнка] Паскаль, Turbo Pascal, PascalABC.NET 1 05.12.2011 13:02
Размер приложения - можно как-то посмотреть что сколько весит? delphicoding Общие вопросы Delphi 11 31.08.2011 19:14
Определить какой краски было потрачено больше всего Maxym_93 Паскаль, Turbo Pascal, PascalABC.NET 1 30.04.2011 00:47
Что вас больше всего раздражает в этом разделе ? (обязательно к прочтению всем новичкам) бедный_студент Помощь студентам 6 02.05.2009 14:47