Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14

Почему, что бы серьезное я не попытался запрограммировать, везде меня преследуют фундаментальные тормоза?

19.11.2020, 19:13. Показов 3367. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В моей жизни было много проектов. Были примитивные, были и серьезные. И практически во всех серьезных были серьезные тормоза. Причем вне зависимости от сути проекта - это и шахматоподобная игра (она была не на C#, но сути это не меняет), и компрессор файлов, и алгоритм шифрования, и вот теперь язык программирования. (Не знаю, что думают модераторы по поводу уместности этой темы в данном разделе, но я думаю, что это в первую очередь обсуждение проблемы в программировании, а не какого-либо проекта.) В предыдущей моей теме я узнал о профилировании, и мне это понравилось. С помощью самой мощной его формы - инструментирования - я нашел несколько "узких мест" и уменьшил время работы следующей программы (надеюсь, перевести ее на любой удобный вам язык вам не составит труда):
Code
1
2
3
4
5
6
7
8
9
real Function F(unsigned int n)
{
    if (n <= 1)
    {
        return n;
    }
    return IntToReal(n) + F(n - 1);
}
return F(200000);
- в два раза, с 30 секунд до 15. При этом на C# аналогичная программа выполняется 10 МИЛЛИсекунд. Я бы еще понял, если бы ультра-высокоуровневый язык был медленнее высокоуровневого в 10 раз. Ну, в 25 - это на пределе. Но он в ПОЛТОРЫ ТЫСЯЧИ раз медленнее!!! Это ужасающе. Причем нет одной строки кода, которая выполняется 80% времени. Распределение времени выполнения функций имеет такой вид, как на скриншоте. И эта статистика существенно меняется от запуска к запуску. Причем вторая строка с 6.97% - это время простоя. Так что проблема находится не в одной строке, а в чем-то более фундаментальном. Тем более, что это повторяется от проекта к проекту. Так в чем же эта проблема? Вот только прошу не отсылать меня в учебники - это равнозначно, что при возникновении конкретной проблемы с какой-либо программой подряд читать справку. Учебники нужны, чтобы изучить основы, а не чтобы решить конкретную проблему. А основы я знаю, и спорить об этом не хочу. Весь мусор, который можно было убрать, я уже убрал, пиковое количество аллоцированных объектов уменьшилось с 2.6М до 387к. (Во время профилирования в целях экономии времени (а в это время надо не обедать, а активно смотреть в экран) и места на диске глубина рекурсии равна 20000, а не 200000, то есть по 19 объектов на каждый вложенный вызов.) Так в чем же проблема? Код выкладывать нет смысла, так как, как я уже написал, это повторяется от проекта к проекту, тем более что одинаково вы ничего не поймете в моем коде. Надеюсь на понимание.
Миниатюры
Почему, что бы серьезное я не попытался запрограммировать, везде меня преследуют фундаментальные тормоза?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2020, 19:13
Ответы с готовыми решениями:

Синие экраны преследуют меня
Привет Компьютер старый, но до определенного момента работал исправно. win10 pro intel core 2 quad q8300 ОЗУ 4ГБ (3.25...

Различные синие экраны преследуют меня три года
Дело такое: уже очень долгое время мой компьютер перезагружается различными синими экранами. Сначала сидел на Windows 7, потом через...

Почему везде в гугле написано что long = 4 байта
почему везде в гугле написано что long = 4 байта? int же 4 байта, но они же не могут быть равными ! как это понимать? разве long не 8 байт?...

45
dive
 Аватар для I can
5002 / 4766 / 851
Регистрация: 13.04.2015
Сообщений: 10,015
19.11.2020, 21:06
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от I2um1 Посмотреть сообщение
Жить в русском мире не хочу.
Ну вот как не бросить говна на вентилятор? Корёжит что ли от всего русского?
0
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
19.11.2020, 21:07
Etyuhibosecyu, какой у вас исходный язык программирования? И зачем вам рекурсия в подобных задачах?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 21:07  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я вроде написал.
Не пойму, что из этого вам не ясно?
Это как раз ясно. Но если компилятор не оптимизирует, то откуда такие ужасные тормоза? Как будто бы условия РАВНЫЕ. И там рекурсия, и там.
0
19.11.2020, 21:09

Не по теме:

Цитата Сообщение от I can Посмотреть сообщение
Ну вот как не бросить говна на вентилятор? Корёжит что ли от всего русского?
Не, каждый обращает внимание на меру своей распущенности.

0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
19.11.2020, 21:12
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Но если компилятор не оптимизирует, то откуда такие ужасные тормоза? Как будто бы условия РАВНЫЕ. И там рекурсия, и там.
Я может не правильно понимаю вас.

Как я понял у вас один и тот же код с рекурсией на разных языках.
На C# этот код принципиально не может быть оптимизирован.
А на другом ЯП эта рекурсия есть в исходном коде, но её не будет после компиляции.

Причины я вроде объяснил.

Или я не правильно понял, с чем вы пытаетесь разобраться?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 21:16  [ТС]
Цитата Сообщение от uzhsoft Посмотреть сообщение
Etyuhibosecyu, какой у вас исходный язык программирования?
Ультра-высокоуровневый, транслируемый в C#. Временное название "Unnamed2". Тут дело не в языке программирования, а в каком-то неудачном паттерне стратегии или что-то такое.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А на другом ЯП эта рекурсия есть в исходном коде, но её не будет после компиляции.
Так этот "другой ЯП" транслируется в C#. И кажется, вопрос был поставлен наоборот, что написанный мной язык в тысячи раз МЕДЛЕННЕЕ C#.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
19.11.2020, 21:19
Цитата Сообщение от Элд Хасп Посмотреть сообщение
На C# этот код принципиально не может быть оптимизирован.
Он в отладочном режиме таймером замеряет.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Как будто бы условия РАВНЫЕ.
Условия не равные. Сравниваются не языки, а среды выполнения - разный рантайм. Причем сравниваются неправильно. Не горячего старта, не с применением всех оптимизаций компилятора и т.д. и т.п..

Добавлено через 1 минуту
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
а в каком-то неудачном паттерне стратегии или что-то такое
Где весь код? Хочу на своём самолёте запустить.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
19.11.2020, 21:29
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А я считаю, что если что-то не переведено на русский - значит не такое оно уже и важное.
Значит для тебя не важны 99% всей здравой и актуальной информации.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Восприму это как личное оскорбление.
Пожалуйста. Тебе уже не раз писали, пока не будешь учиться, так и будешь ходить и плакаться на тормоза и общую какашность программ. Хотя нет, второе тебе не грозит - ты не можешь этого осознать.
И то что ты утверждаешь о том, что что-то знаешь этого никак не изменит.
2
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
19.11.2020, 21:29
Etyuhibosecyu, чтобы ответить на ваш вопрос, необходимо изучать проект который вы пишете... Или проблема в том, что ваш транслятор выдает код, аналогичный коду который запускается из VS, а компилятор компилирует их в ехе которые выполняются с разным временем?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 21:31  [ТС]
Цитата Сообщение от I2um1 Посмотреть сообщение
Где весь код? Хочу на своём самолёте запустить.
Вот. Надеюсь, хоть форму соберете сами.
Вложения
Тип файла: rar Unnamed2.rar (57.3 Кб, 12 просмотров)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
19.11.2020, 21:35
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Так этот "другой ЯП" транслируется в C#. И кажется, вопрос был поставлен наоборот, что написанный мной язык в тысячи раз МЕДЛЕННЕЕ C#.
Возьми и посмотри, какой C# код генерирует твой транслятор.
А еще какие есть отличия от сборки "быстрого" кода.
1
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
19.11.2020, 21:46
Etyuhibosecyu, беглый обзор:
- огромное количество выделений памяти
- конкатенация строк в цикле
- очень много мест, где возможен промах кеша
Эти штуки кошмарно садят перформанс. + есть некоторые нарекания за использование сопоставления по образцу.

В релизе работает значительно быстрее. Чем не устроили готовые решения как ANTLR?
2
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 21:52  [ТС]
Цитата Сообщение от I2um1 Посмотреть сообщение
- огромное количество выделений памяти
Какие, например, из них лишние?
Цитата Сообщение от I2um1 Посмотреть сообщение
- конкатенация строк в цикле
Где, например? Как будто бы постарался по максимуму ее убрать.
Цитата Сообщение от I2um1 Посмотреть сообщение
- очень много мест, где возможен промах кеша
Такие места вообще не умею определять. Думаю, что он возможен в ЛЮБОМ месте.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
19.11.2020, 21:52
Да~, там еще и рефлексия. Сверх медленная вещь.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 21:54  [ТС]
Цитата Сообщение от I2um1 Посмотреть сообщение
Да~, там еще и рефлексия. Сверх медленная вещь.
Покажите мне рефлексию.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16158 / 11278 / 2891
Регистрация: 21.04.2018
Сообщений: 33,164
Записей в блоге: 2
19.11.2020, 21:54
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Так этот "другой ЯП" транслируется в C#. И кажется, вопрос был поставлен наоборот, что написанный мной язык в тысячи раз МЕДЛЕННЕЕ C#.
Ну, я только сейчас это понял.
Одного языка для оптимального кода мало, нужен ещё хороший компилятор.
А для этого надо хорошо знать теорию ЯП, в ответ на какие вызовы какой язык создавался, как они связанны с машиной архитектурой, почему используются те или иные операторы, инструкции.

Раз у вас надстройка над C#, то смотрите как ваш исходный код транслируется в C#.
Ну как Формы и WPF - можно получить их C# или CIL коды и посмотреть причину тормозов.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 21:57  [ТС]
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Где, например? Как будто бы постарался по максимуму ее убрать.
Еще раз просмотрел, нашел в цикле только в GetNumber(). Сейчас уберу.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
19.11.2020, 22:15
Etyuhibosecyu, этот код вообще руками был написан? Похож на автогенерируемый. Как это вообще сопровождать? Проще выкинуть и использовать ANTLR. Я когда искал по ключевым словам рефлексию, не обратил внимание на резервированные слова в длиннющих строках. Несколько раз запутался в файле на 4к строк.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Какие, например, из них лишние?
Огромное количество этого например:
C#
1
new List<string> { string_ }
И как-то странно искать лексемы с помощью Contains.
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,837
Записей в блоге: 14
19.11.2020, 22:19  [ТС]
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Еще раз просмотрел, нашел в цикле только в GetNumber(). Сейчас уберу.
И то, там не в цикле, а всего несколько раз. Такой код лучше?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        private string GetNumber(out LexemType type)
        {
            int start = pos;
            List<string> list = new() { GetNumber2(out type) };
            if (ValidateChar('.'))
            {
                type = LexemType.Real;
                list.Add(string_[(pos - 1)..pos]);
                list.Add(GetNumber2(out _));
                if (list[0] == "" && list[2] == "")
                {
                    pos = start;
                    return "";
                }
            }
            if (list[0] != "" && ValidateCharList("Ee") && ValidateCharList("+-"))
            {
                type = LexemType.Real;
                list.Add(string_[(pos - 2)..pos]);
                list.Add(GetNumber2(out _));
            }
            if (list[0] != "" && ValidateChar('r'))
            {
                type = LexemType.Real;
                list.Add("r");
            }
            return string.Join("", list.ToArray());
        }
Мне кажется, что эквивалентно.
Цитата Сообщение от I2um1 Посмотреть сообщение
Огромное количество этого например:
А как можно объединить строки без прямой конкатенации и без аллокации списка? Есть какой-то третий способ?

Добавлено через 1 минуту
Цитата Сообщение от I2um1 Посмотреть сообщение
этот код вообще руками был написан? Похож на автогенерируемый.
Нет, это не автогенерируемый код.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
19.11.2020, 22:23
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А как можно объединить строки без прямой конкатенации и без аллокации списка? Есть какой-то третий способ?
StringBuilder с заранее заданным размером. Можно еще переиспользовать созданные объекты. Мне кажется тут лучше вообще было начать с LL(1), а не в дебри вдаваться, чтобы понять базис.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2020, 22:23

Почему-то сообщает, что dr closed. Что у меня не так?
Imports System Imports System.Data Imports System.Data.OleDb Imports System.Web.UI.Page Namespace Dict Public Class Word ...

Реклама везде, она меня преследует
здравствуйте , прошу помощи , у меня реклама по всюду выходит, даже в стиме в окне покупке игр, в браузерах и не работает время от времяни...

Таблицы: в числовом поле ввожу 0,5 или 0,6, а у меня везде 0,0
Подскажите пожалуйста в базе данных в таблице в числовом поле ввожу 0,5 или 0,6, а у меня везде 0,0. Подскажите пожалуйста...

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

Попытался выразить дифференциал. Вот что получилось
Попытался выразить дифференциал y={x}^{2}. Вот что получилось. df={f}^{|}*dX df=2X*dX Но на сколько я понимаю дифференциал равен...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru