Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Периодические задержки при выполнении программы |
Автор: constant 21.12.2015, 09:47 | ||
Выполняю задачу, требуется произвести вычисления, настолько быстро, насколько это позволяют ресурсы системы, пусть даже в ущерб всем остальным процессам. При анализе производительности обратил внимание на следующую особенность. Как правило участки кода выполняются за более-менее одинаковое время, однако, периодически происходят непонятные мне задержки, достаточно длительные. Я попытался сделать упрощенную модель программы, чтобы показать, то, что я имею в виду. В программе итеративный процесс, на каждой итерации длинный внутренний цикл, имитирующий вычисления. Далее, на каждом цикле запоминаем время окончания вычисления. После этого находим продолжительность каждой итерации. Находим среднее время итерации. После чего ищем итерации, продолжительность которых более чем в три раза выше средней и выводим их. Если посмотреть на продолжительность итераций, то в большинстве случаев они практически одинаковые (порядка 70 мкс в моем случае).Но есть итерации,которые более чем в 8 раз больше среднего. Следует отметить также, что процессор во время выполнения программы загружается где-то процентов на 13%. Т.е. свободных ресурсов процессора - "выше крыши", процессор используется неэффективно, и программа может быть выполнена гораздо быстрее.Пробовал увеличивать приоритет процесса и потока до максимальных - эффекта практически нет. Вопросы: 1. Из-за чего происходят большие периодические задержки в выполнении программы, и как от них избавится ? 2. Почему процессорное время используется неэффективно, как задействовать все ресурсы процессора для выполнения программы ?
|
Автор: chupachups 22.12.2015, 13:13 | ||
1) Windows + .NET = никогда не позволят тебе загрузить процессор на 100%, в моем случае процессор загрузился только на 25%. 2) Никогда не определяй производительность запуская программу из студии, особенно с включенным параметром "Enable the Visual Studio hosting process". 3) Даже тестовый код оптимизируй по максимуму (5 запусков, ни одного превышения):
Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Periodicheskiye-zaderzhki-pri-vypolnenii-programmy-id5677a0a3ae20158f668b4568#findElement_E7045_5679223dae20159b44151241_0 |
Автор: sgrey 23.12.2015, 16:44 |
Такое поведение программы вплне ожидаемо. Очень трудно нагрузить процессор полностью вычислениями в одном потоке. А причин задержек может быть множество - может context switch происходит в этот момент, а может неудачно в линию кэша попала часть массива, а может ещё много чего и без самих вычислений нельзя сказать точно что происходит. Код только из студии запускался? Так нельзя, нужно его отдельно запускать и измерять производительность. |