C# почему Console.WriteLine медленный?
От: Разраб  
Дата: 20.07.23 06:29
Оценка:
Замерял вывод 1млн интов.
питон(!) быстрее печатает.
кресты вообще в несколько раз быстрее через cout << x << endl чем релизный код на .net8

PS clang++-11 не понимает числовые литералы с разделителем типа 1000_000. Легкий шок.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: C# почему Console.WriteLine медленный?
От: Maniacal Россия  
Дата: 20.07.23 06:48
Оценка: 7 (3)
Здравствуйте, Разраб, Вы писали:

Р>Замерял вывод 1млн интов.

Р>питон(!) быстрее печатает.
Р>кресты вообще в несколько раз быстрее через cout << x << endl чем релизный код на .net8

Р>PS clang++-11 не понимает числовые литералы с разделителем типа 1000_000. Легкий шок.


Тут много ответов и решений этого вопроса:
https://stackoverflow.com/questions/5272177/console-writeline-slow
Re: C# почему Console.WriteLine медленный?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 20.07.23 08:09
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Замерял вывод 1млн интов.

А для чего это нужно?
Мне сложно представить полезную задачу с таким огромным выводом в консоль. Всё с чем доводилось сталкиваться печатало справку, прогресс работы, логи...
И прямо чтобы это стало камнем преткновения — не натыкался.
Re[2]: C# почему Console.WriteLine медленный?
От: Разраб  
Дата: 20.07.23 08:12
Оценка: 1 (1)
Здравствуйте, Михаил Романов, Вы писали:

МР>Здравствуйте, Разраб, Вы писали:


Р>>Замерял вывод 1млн интов.

МР>А для чего это нужно?
МР>Мне сложно представить полезную задачу с таким огромным выводом в консоль. Всё с чем доводилось сталкиваться печатало справку, прогресс работы, логи...
МР>И прямо чтобы это стало камнем преткновения — не натыкался.

Консольные утилиты в линуксе
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: C# почему Console.WriteLine медленный?
От: pagid_ Россия  
Дата: 20.07.23 08:59
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Замерял вывод 1млн интов.

Р>питон(!) быстрее печатает.
Р>кресты вообще в несколько раз быстрее через cout << x << endl чем релизный код на .net8

Перенаправлять вывод в файл пробовал, сравнивал результат?
Re[3]: C# почему Console.WriteLine медленный?
От: karbofos42 Россия  
Дата: 20.07.23 18:08
Оценка: +1 -1 :)))
Здравствуйте, Разраб, Вы писали:

Р>Консольные утилиты в линуксе


Читаешь быстрее, чем C# выводит в консоль?
Или печатаешь всё подряд для солидности, т.к. в линуксах так все делают?
Re: C# почему Console.WriteLine медленный?
От: CreatorCray  
Дата: 21.07.23 00:16
Оценка: 1 (1) +1
Здравствуйте, Разраб, Вы писали:

Р>Замерял вывод 1млн интов.

Р>питон(!) быстрее печатает.
Р>кресты вообще в несколько раз быстрее через cout << x << endl чем релизный код на .net8

Думается что дело в буферизации вывода внутри С/С++ рантайма vs вывод каждой строки отдельно.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: C# почему Console.WriteLine медленный?
От: Разраб  
Дата: 21.07.23 01:45
Оценка:
Здравствуйте, pagid_, Вы писали:

_>Здравствуйте, Разраб, Вы писали:


Р>>Замерял вывод 1млн интов.

Р>>питон(!) быстрее печатает.
Р>>кресты вообще в несколько раз быстрее через cout << x << endl чем релизный код на .net8

_>Перенаправлять вывод в файл пробовал, сравнивал результат?


запускал по ssh (.net8 publish release)
console на экран 31 сек, в файл 11
streamwriter на экран 5 сек, в файл 0.5
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: C# почему Console.WriteLine медленный?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.07.23 07:34
Оценка:
Здравствуйте, Разраб, Вы писали:

_>>Перенаправлять вывод в файл пробовал, сравнивал результат?


Р>запускал по ssh (.net8 publish release)

Р>console на экран 31 сек, в файл 11
Р>streamwriter на экран 5 сек, в файл 0.5
Наверное рендеринг шрифтов, несколько более долгая операция чем просто посылка байтов в буффер
и солнце б утром не вставало, когда бы не было меня
Re[4]: C# почему Console.WriteLine медленный?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 21.07.23 08:27
Оценка: 4 (3)
Здравствуйте, Serginio1, Вы писали:

S> Наверное рендеринг шрифтов, несколько более долгая операция чем просто посылка байтов в буффер

Вообще, как-то несколько лет назад всплывало обсуждение, что команда Windows признала, что их реализация консоли очень медленная (и кстати, я после этого начал замечать, что если программа выводит очень много в консоль, то стоит свернуть окно консоли и скорость работы может возрасти кратно!)
Они тогда объяснили тем, что консолью никто особо не планировал пользоваться в режиме массового вывода (как в том же Linux) и потому задачи оптимизации никогда не ставилось.
А несколько лет назад это стало уже критичным (там всякие пошли Core Server, облака, ... ) и за задачу взялись.
Но, как я понял, совместимость всё же пришлось оставить и некоторые софтины переключаются туда https://learn.microsoft.com/en-us/windows/console/legacymode

Впрочем, не исключаю, что и для новой консоли разница между выводом на экран и записью в файл может быть заметной.
Отредактировано 21.07.2023 8:42 Михаил Романов . Предыдущая версия .
Re[5]: C# почему Console.WriteLine медленный?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.07.23 08:45
Оценка:
Здравствуйте, Михаил Романов, Вы писали:


S>> Наверное рендеринг шрифтов, несколько более долгая операция чем просто посылка байтов в буффер

МР>Вообще, как-то несколько лет назад всплывало обсуждение, что команда Windows признала, что их реализация консоли очень медленная (и кстати, я после этого начал замечать что если программа выводит очень много в консоль, то стоит свернуть окно консоли и скорость работы может возрасти кратно!)
Ну это понятно. Если окно не видно, то нафиг его и рендерить. Там же не только вывод строки, но и смещение экрана.
Тут можно посмотреть вывод не одного сообщения, а буфер например 10 кб и по времени если в буфере есть данные, но какое то время не было сообщений
и солнце б утром не вставало, когда бы не было меня
Re[5]: C# почему Console.WriteLine медленный?
От: CreatorCray  
Дата: 21.07.23 09:32
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Но, как я понял, совместимость всё же пришлось оставить и некоторые софтины переключаются туда https://learn.microsoft.com/en-us/windows/console/legacymode

Я переключил system-wide на старую ибо глюки "новой" консоли в FAR мне не понравились категорически.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: C# почему Console.WriteLine медленный?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 21.07.23 10:45
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Я переключил system-wide на старую ибо глюки "новой" консоли в FAR мне не понравились категорически.

А что именно за проблемы?
Я просто пользуюсь FAR и консоль включена новая (по крайне мере галочка "использовать legacy" не стоит), но никаких особо заметных проблем не вылезло.
Re: C# почему Console.WriteLine медленный?
От: syrompe  
Дата: 21.07.23 13:49
Оценка:
Быстрый консольный ввод на .NET
Re[7]: C# почему Console.WriteLine медленный?
От: CreatorCray  
Дата: 21.07.23 17:27
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

CC>>Я переключил system-wide на старую ибо глюки "новой" консоли в FAR мне не понравились категорически.

МР>А что именно за проблемы?
Я уже точно не помню, год назад было. Выключать обратно неохота, ибо это через ребут
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: C# почему Console.WriteLine медленный?
От: Ilya81  
Дата: 24.07.23 04:38
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Думается что дело в буферизации вывода внутри С/С++ рантайма vs вывод каждой строки отдельно.


Похоже на фирменный стиль mircosoft, в WPF они тоже решили отправлять в видеопамять каждый widget при каждом изменении по отдельности, т. е. каждый раз устанавливая блокировку заново. Причём всё так и оставляют навсегда, покуда их очередное творение совсем не вымрет.
Re[4]: C# почему Console.WriteLine медленный?
От: peiv Россия  
Дата: 24.07.23 10:27
Оценка:
K>Читаешь быстрее, чем C# выводит в консоль?
K>Или печатаешь всё подряд для солидности, т.к. в линуксах так все делают?


Передаешь другой консольной утилите на вход.
Re[5]: C# почему Console.WriteLine медленный?
От: pagid_ Россия  
Дата: 24.07.23 10:55
Оценка:
Здравствуйте, peiv, Вы писали:

P>

P>Передаешь другой консольной утилите на вход.
Но жалуешься при этом на именно на скорость вывода на экран
Re[6]: C# почему Console.WriteLine медленный?
От: Разраб  
Дата: 24.07.23 12:56
Оценка:
Здравствуйте, pagid_, Вы писали:

_>Здравствуйте, peiv, Вы писали:


P>>

P>>Передаешь другой консольной утилите на вход.
_>Но жалуешься при этом на именно на скорость вывода на экран

Причем тут экран? вот результаты тестов 8 корки:
console на экран 31 сек, в файл > 11
streamwriter на экран 5 сек, в файл > 0.5

консоль в 20(!) раз медленнее стрима даже в пайплайне
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: C# почему Console.WriteLine медленный?
От: vsb Казахстан  
Дата: 24.07.23 14:59
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>>> Наверное рендеринг шрифтов, несколько более долгая операция чем просто посылка байтов в буффер

МР>>Вообще, как-то несколько лет назад всплывало обсуждение, что команда Windows признала, что их реализация консоли очень медленная (и кстати, я после этого начал замечать что если программа выводит очень много в консоль, то стоит свернуть окно консоли и скорость работы может возрасти кратно!)
S> Ну это понятно. Если окно не видно, то нафиг его и рендерить. Там же не только вывод строки, но и смещение экрана.
S> Тут можно посмотреть вывод не одного сообщения, а буфер например 10 кб и по времени если в буфере есть данные, но какое то время не было сообщений

Просто надо делать адекватную архитектуру.

Буфер это одно. К отрисовке он вообще не должен никакого отношения иметь. Программа просто пишет в кольцевой буфер что хочет. Скорость ограничена только скоростью оперативной памяти.

Отрисовка консоли это другое. 60 раз в секунду (или какая там частота экрана у юзера) — брать видимую часть из буфера и отрисовывать её.

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