Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
18 / 15 / 0
Регистрация: 29.09.2011
Сообщений: 82
1
.NET 4.x

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

20.04.2016, 10:53. Показов 1037. Ответов 7
Метки нет (Все метки)

Здравствуйте, заметил такое дело. Имеем часть кода
Где pg-это List<Page>(параметры страницы для сайта) состоит из 1000 строк.
s_Id-число по которому ищем соответствие в pg

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
System.Diagnostics.Stopwatch myStopwatch = new System.Diagnostics.Stopwatch();
myStopwatch.Start();
for (int i=0; i < 200000; i++)
{
Page ph = new Page();
                int l = 0;
                while (true)
                {
                    if (pg[l].Id == s_Id)
                    {
                        ph = pg[l];
                        break;
                    }
                    l++;
                }
}
myStopwatch.Stop(); //остановить
            TimeSpan ts = myStopwatch.Elapsed;
string time=ts.Milliseconds.ToString();
Так вот вопрос почему, при разных s_Id разная скорость выполнения? например у меня так выходит s_Id=600 time=950, а при s_Id=700 time=263 !!!!!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2016, 10:53
Ответы с готовыми решениями:

Надо улучшить скорость выполнения кода (формирование длинной строки)
Есть метод который возвращает случайное слово: public static string RandomWord(int Number) {...

Максимально сократить скорость выполнения кода
Привет всем, есть такой код: (Выполняет скачивание строк с хешкодом/путем до файла, получает...

Почему время выполнения unsafe и обычного кода примерно одинаково
Почему-то скорость выполнения сложных операций в с матрицами, элементы которых лежать в одномерном...

Скорость выполнения кода
Началось все с одной несложной задачки - https://www.cyberforum.ru/haskell/thread1821507.html Я...

7
Заблокирован
20.04.2016, 11:02 2
А ты уверен, что дело именно в листе, а не в new Page? Зачем вообще объект создавать в цикле? Где этот ph потом используется?
0
18 / 15 / 0
Регистрация: 29.09.2011
Сообщений: 82
20.04.2016, 11:10  [ТС] 3
а что от того где используется ph зависит скорость выполнения приведенного кода? Вы видимо совсем вопрос непоняли. Этот код написан для измерения скорости выполнения поиска нужной строки в List<Page> и неболее
0
1449 / 842 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
20.04.2016, 11:16 4
Лучший ответ Сообщение было отмечено mirexes как решение

Решение

Цитата Сообщение от mirexes Посмотреть сообщение
например у меня так выходит s_Id=600 time=950, а при s_Id=700 time=263 !!!!!
Ты не то свойство взял!
Тебе надо смотреть не ts.Milliseconds а ts.TotalMilliseconds
1
Заблокирован
20.04.2016, 11:17 5
Цитата Сообщение от mirexes Посмотреть сообщение
Этот код написан для измерения скорости выполнения поиска нужной строки в List<Page>
Тогда он и должен только искать строку, а не создавать кучу левых ненужных для поиска объектов. Иначе, тестирование грязное.
1
18 / 15 / 0
Регистрация: 29.09.2011
Сообщений: 82
20.04.2016, 11:22  [ТС] 6
точно, все стало на место.

Добавлено через 1 минуту
Цитата Сообщение от nimazzzy Посмотреть сообщение
Тогда он и должен только искать строку, а не создавать кучу левых ненужных для поиска объектов. Иначе, тестирование грязное.
Это тестовый пример для сравнения скорости выполнения различных способов поиска нужной строки
0
Модератор
Эксперт .NET
5777 / 4661 / 2934
Регистрация: 20.04.2015
Сообщений: 8,335
20.04.2016, 11:29 7
mirexes,
Вообще здесь в цикле идет последовательный перебор элементов списка. И если значение s_Id=700 обнаруживается в элементе расположенном по меньшему индексу (ближе к началу списка), чем элемент с s_Id=600, то break наступит раньше. Соответственно вложенный цикл выполнится быстрее.
0
18 / 15 / 0
Регистрация: 29.09.2011
Сообщений: 82
20.04.2016, 11:38  [ТС] 8
Ответ дал LeniumSoft правильный, вопрос закрыт

Добавлено через 3 минуты
Цитата Сообщение от nimazzzy Посмотреть сообщение
Тогда он и должен только искать строку, а не создавать кучу левых ненужных для поиска объектов. Иначе, тестирование грязное.
Спасибо нажал вам по ошибке!, я просто не понял к чему вы вобще столько слов не потеме написали

Добавлено через 2 минуты
В приведенном примере поиск нужной строки оказался самым быстрым из мною опробованных способов, но возможно я еще про какие-то способы незнаю

Добавлено через 1 минуту
например
C#
1
var dd = pg.FirstOrDefault(n => n.Id == s_Id);
оказался в 2,5 раза медленней
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2016, 11:38

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Увеличить скорость выполнения кода
Здравствуйте. Суть: есть значения аргумента функции (inputP_W_1W) и значения самой функции (gain)....

Как оптимизировать скорость выполнения кода?
Дано решение задачи судоку 9х9 рекурсивным алгоритмом поиска с возвратами (backtracking). Нужно,...

Как отследить скорость выполнения кода в приложении
Всем привет. Есть проект, клиент говорит что одна из операций занимает много времени, но судя по...

Узнать скорость выполнения определённого участка кода
Доброй ночи. Собственно вопрос заключается в следующем, нужно узнать скорость выполнения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.