powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Stopwatch в цикле
23 сообщений из 23, страница 1 из 1
Stopwatch в цикле
    #38397457
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос. Из-за чего в первом алгоритме time_ меньше в 1,5 раза по сравнению со вторым алгоритмом?

1ый алгоритм:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for (int index = 0; index < list_offset.Count; index++)
{
Stopwatch sWatch = new Stopwatch();
sWatch.Start();
.
.
.
sWatch.Stop();
time_ += Convert.ToInt32(sWatch.ElapsedMilliseconds);
}




2ой алгоритм:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Stopwatch sWatch = new Stopwatch();
sWatch.Start();
for (int index = 0; index < list_offset.Count; index++)
{
.
.
.
}
sWatch.Stop();
time_ += Convert.ToInt32(sWatch.ElapsedMilliseconds);



Весь другой код, который в цикле for остается таким же в обоих примерах.
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397466
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из за вашей невнимательности Обратите внимание на методы этого класса с "говорящими" названиями :)
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397494
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аааа... я не разглядел сперва... что вы измеряете :) Ща...
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397509
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не пойму в чем косяк
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397517
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserИз за вашей невнимательности Обратите внимание на методы этого класса с "говорящими" названиями :)

у меня строчка
Код: c#
1.
for (int index = 0; index < list_offset.Count; index++)



почему-то съедает половину времени выполнения самого тела цикла
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397519
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Students,

почему думаешь, что строчка, а не Start, Stop и new?
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397528
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisStudents,

почему думаешь, что строчка, а не Start, Stop и new?

т.к. вряд ли таймер делали так, чтобы он и сам ещё время съедал
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397531
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisStudents,

почему думаешь, что строчка, а не Start, Stop и new?

Первый алгоритм, когда ВНУТРИ цикла таймер, time_ в полтора раза меньше
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397538
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... это поведение повторяется при любом способе организации цикла... х.з. неужто инкремент и переход на метку... Даже интересно... Ктонить разжует? :)
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397549
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, я знаю.

у меня в списке 4500 переменных типа int.
в цикле выполняются определенные операции, на которые тратится 2 сек.

А на сам for тратится 1-1,5 сек.

Это очень странно. По сути на "инкремент и переход на метку" тратится почти половина всего времени
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397556
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотрите, если написать так (сделать мало операций в цикле):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
                Stopwatch sWatch = new Stopwatch();
                sWatch.Start();
                for (int index = 0; index < list_offset.Count; index++)
                {
                    int a = list_offset[index];
                    int b = 5;
                    a = b * 2 + a;
                }
                sWatch.Stop();
                time_ += Convert.ToInt32(sWatch.ElapsedMilliseconds);



То time_ равно 0.
Хотя тут тоже есть for, "инкремент и переход на метку"
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397565
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неужели никто не знает?
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397571
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Students,

ну а какое время в двух случаях получается, если выполнять полные операции?
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397579
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а что тут непонятного, инициализация цикла тоже имеет какие-то косты. Вот, собственно, оно и налицо.
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397580
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisStudents,

ну а какое время в двух случаях получается, если выполнять полные операции?

в первом алгоритме 2-2,2 сек, во втором 3-3,5 сек.
как будто 3 строчки:
Код: c#
1.
2.
3.
for (int index = 0; index < list_offset.Count; index++)
{
}



съедают 1,5 секунды.
в list_offset содержится 4500 переменных типа int
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397582
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Studentsне пойму в чем косяк
Косяка нет, это абсолютно разный код, требующий абсолютно разное время на выполнение. В чем проблема-то?
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397599
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь померять не секунды ElapsedMilliseconds, а процессорные тики ElapsedTicks (без потерь на округление). Разница у этих двух "алгоритмов" просто космическая. ~278 тыс тиков против 7 тыс.
Оно и понятно, основные потери на инициализации цикла, инкремента, обращении к экземпляру списка и самое главное: на инстанциирование экземпляра класса Stopwatch в каждой итерации .

Какую взаимосвязь ты решил тут найти в этом бредовом замере кода?
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397613
Students
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУМожешь померять не секунды ElapsedMilliseconds, а процессорные тики ElapsedTicks (без потерь на округление). Разница у этих двух "алгоритмов" просто космическая. ~278 тыс тиков против 7 тыс.
Оно и понятно, основные потери на инициализации цикла, инкремента, обращении к экземпляру списка и самое главное: на инстанциирование экземпляра класса Stopwatch в каждой итерации .

Какую взаимосвязь ты решил тут найти в этом бредовом замере кода?

смысл такой.

у меня есть pdf. в первом варианте я его не делю на кусочки по 2 МБ и просто сдвигаю позицию в filestream, во втором делю на кусочки по obj/endobj, получается 4500. В итоге, если не замерять время for, то код работает одинаково, но из-за этих полутора секунд для "инициализации цикла, инкремента, обращении к экземпляру списка" весь 2 алгоритм идет к черту.
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397625
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, самое забавное, если вы обратили внимание, код номер раз дает меньшую цифирь...
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397627
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Studentsу меня есть pdf. в первом варианте я его не делю на кусочки по 2 МБ и просто сдвигаю позицию в filestream, во втором делю на кусочки по obj/endobj, получается 4500. В итоге, если не замерять время for, то код работает одинаково, но из-за этих полутора секунд для "инициализации цикла, инкремента, обращении к экземпляру списка" весь 2 алгоритм идет к черту.
Значит, пользуйся первым способом, если он тебя устраивает. Эти два примера не эквивалентны. Что ты хочешь еще услышать, чтобы мы с помощью магии заставили второй способ работать столько же как и первый? Чудес не бывает.
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397628
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserМСУ, самое забавное, если вы обратили внимание, код номер раз дает меньшую цифирь...
Чудес не бывает, это тупо округление секунд - если код выполнился за 0.44 секунды, ElapsedMilliseconds == 0
А теперь возьми в руки ElapsedTicks...
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397642
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну... про "округление"... была мысль... да - фигня все это... :)
...
Рейтинг: 0 / 0
Stopwatch в цикле
    #38397644
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Топик безумия... :)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Stopwatch в цикле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]