Я всего лишь хотел записать сорокасекундную озвучку простенького видео, поэтому запустил стандартное приложение Запись голоса (Voice Recorder) операционной системы Windows и нажал на кнопку записи. Казалось, что ничего не произошло.
Позже я проверил и оказалось, что программа выполняет запись. Я немного поэкспериментировал и выяснил, что в первый раз, когда я начинал запись после запуска Записи голоса, её реакции иногда предшествовала долгая задержка. Двадцатисекундная задержка при записи сорокасекундного клипа — довольно низкий КПД. Это расстроило меня настолько, что я захотел разобраться, почему так получается, и запустил трассировку ETW.
Современное ПО любит использовать дополнительные процессы, поэтому меня не удивило то, что самым нагруженным процессом был не SoundRec.exe, а «RuntimeBroker.exe <Microsoft.WindowsSoundRecorder>». Взглянув на его использование процессора, я заметил, что нагрузка повышается, как только я запускаю Запись голоса, даже до того, как я нажму на кнопку записи.
RuntimeBroker сильно нагружал процессор и тратил бОльшую часть своего времени в одном потоке, который активно выполнял запросы результатов просмотра какой-то папки:
Следующим я посмотрел на график файлового ввода-вывода, чтобы понять, что за папку он сканирует. Результаты оказались немного разрозненными (возможно, иногда сканирование завершалось слишком рано?), но выяснилось, что RuntimeBroker сканировал (в том же потоке) часть моей папки с документами или её целиком.
Тем временем, ещё один поток RuntimeBroker тратил немного времени в propsys.dll!TryGetFileTypeAssocFromStateRepository.
Я предположил, что цель всего этого заключалась в том, чтобы найти все аудиофайлы в моей папке документов, чтобы заполнить список предыдущих записей. И когда я начал следить за этим, то выяснил, что при запуске Записи голоса программа после существенной паузы заполняет список записей. Если я нажимал кнопку записи после заполнения списка, запись начиналась мгновенно.
<сарказм>Очевидно, в этом случае ошибку совершил пользователь. Если бы я терпеливо подождал, пока мой медленный компьютер будет готов, то при начале записи программа была бы быстрой и отзывчивой.</сарказм>
Безумие этой задержки из-за сканирования папки с документами в том, что Запись голоса, похоже, игнорирует все аудиофайлы, не находящиеся в папке Аудиозаписи. Всё это сканирование происходит впустую?
Жалобы и вопросы
По поводу всего этого у меня есть некоторые соображения…
- Команда
dir /s
может отсканировать мою папку с документами менее чем за две секунды. Почему у RuntimeBroker сканирование занимает в 5-10 раз больше времени? В этой папке у меня всего около 44 тысяч документов, что за фильтрация используется, которая добавляет на каждый файл лишние полмиллиона тактов? - Зачем RuntimeBroker сканирует всю папку с документами, если Запись голоса игнорирует аудиофайлы, не находящиеся в подпапке «Аудиозаписи»? Это проблема WinRT или Записи голоса?
- Что происходит у пользователей, не имеющих SSD и 32 ГБ ОЗУ? В моём случае структура папки «Документы» целиком кэширована в память, поэтому для сканирования не требуется активность диска, но некоторым пользователям повезло меньше. Если у этих пользователей больше файлов и они хранятся на жёстком диске, то их остаётся только пожалеть.
- При выполнении операции, не позволяющей пользователю работать с приложением, честнее использовать шкалу прогресса или курсор ожидания. UI Записи голоса всегда реагировал на взаимодействия, но на самом деле это было ложью — кнопка записи должна быть отключена, пока приложение не готово.
- Почему сканирование папки с документами иногда выполняется только для части папки? У RuntimeBroker есть какое-то кэширование?
Я недостаточно знаю о WinRT и RuntimeBroker, чтобы осознанно говорить о причинах проблемы, но уверенно скажу, что если приложение-диктофон не способно мгновенно записывать голос на современном оборудовании, то в архитектуре определённо имеются изъяны.
Всё тестирование выполнялось на Windows 10, 21H2. В Windows 11 приложение Запись голоса заменено на Windows Sound Recorder, код которого полностью переписан. Похоже, в переписанной версии этого бага нет, так что ура, прогресс, но я опасаюсь за мир ПО, в котором приложения не исправляются, а переписываются.
Комментарии (245)
Yuris1C
14.10.2022 09:42-23Я немного поэкспериментировал и выяснил, что в первый раз, когда я начинал запись после запуска Записи голоса, её реакции иногда предшествовала долгая задержка. Двадцатисекундная задержка при записи сорокасекундного клипа — довольно низкий КПД. Это расстроило меня настолько, что я захотел разобраться, почему так получается, и запустил трассировку ETW.
Может быть, для начала, нужно антивирус запустить?
isadora-6th
14.10.2022 10:10+14Так он в Win встроенный, получше всяких Avast Free будет.
Да и масштаб проблемы совсем уже не вирусный.
Yuris1C
14.10.2022 10:41-5масштаб проблемы совсем уже не вирусный.
Скорее всего, там проблема не в приложении, если 20 секунд задержки, а в засранности компа.
Xeldos
14.10.2022 12:07+35Так автор уже смирился, что виноват пользователь. Если бы он писал олос как нормальный человек, на i9, на пустом терабайтном PCIE 5 SSD, с 64 памяти и свежеустановленной ОС, никаких проблем бы не было..
Что вообще за понятие такое - "засранный комп"? Комп - это мой рабочий кабинет. Моя мастерская. И да, у меня там МНОГО всего, иначе зачем мне терабайчтные PCIE5 SSD и 64 Гб памяти? SoundRec запускать (который работал в Win3.1 в окружении слабее на три порядка)?
isadora-6th
14.10.2022 12:49+6У автора поста 32Гб ОЗУ и SSD, 20 секунд зависаний даже броди там майнеры — не будет в контексте реакции на кнопку записи голоса 20 секунд. Не может. Ведь у меня даже при билде крестов во все потоки ядер и неироничных 100% cpu, кнопочки юай отрабатывают быстро.
Это не cpu bound задача, это каллбек, она не может тормозить сама по себе. Ну не получится его засрать.
Тут вопрос в том, зачем оно опрашивает все документы, если использует одну папку и почему эта операция блокер новой записи
CrashLogger
14.10.2022 12:56+16Еще со времен Windows 95 не храню ничего в Моих документах и на Рабочем столе. И вообще под данные держу отдельный диск.
qyix7z
14.10.2022 14:40И вообще под данные держу отдельный диск.
Аналогично, но есть софт, который кроме Моих документов ничего не хочет признавать, поэтому переношу весь профиль пользователя с системного на отдельный диск.osmanpasha
15.10.2022 08:15"Мои документы" можно перенести в другое место в их "Свойствах", у меня 99% программ с этим отлично работают. Правда, много программ пишут гигабайты в %APPDATA%, который остается на системном диске.
qyix7z
15.10.2022 12:22пишут гигабайты в %APPDATA%, который остается на системном диске.
И поэтому в том числе переношу весь профиль, а не отдельные папки. При этом работает 100% (мне сбои не попадались) программ.
anka007
14.10.2022 15:16Ну так на отдельном диске папка для моих документов, это ж легко переносится. А встроеные пути по умолчанию в целом достаточно удобная вещь. На винде даже поудобнее фильтруется что где хранить физически, чем под линуксом: последний имеет совсем прозрачную организацию дискового пространства и мест хранения ПО.
AlexZaharow
14.10.2022 09:44+2Если бы такие мелкие сервисные утилиты отдали на OpenSource, то такую мелочь давно бы поправили. Так-то есть другие приличные программы записи и обработки звука/видео либо из OpenSource, либо бесплатные.
За пример использования профилировщика ETW спасибо, надо будет глянуть.
Fox_exe
14.10.2022 10:37+21Все эти штатные утилиты были в прошлых версиях винды. И работали там моментально, т.к. написано было на С++ и без всех этих свистоперделок и рюшечек в интерфейсе.
Из-за адской тормознутости всех новых "Метро-приложений" пришлось на Win 10 ставить кучу твиков, возращающих старый "Просмотр изображений", калькулятор, запись звука, и прочее.
Чёрт! Да даже paint.net, написанный на томже самом C#, что и встроенный, запускается мнгновенно, работает без тормозов и обладат в разы большим функционалом, чем штатный недо-paint!
Sixshaman
14.10.2022 11:40+4paint.net ... запускается мнгновенно
Нет. У меня запуск занимает 6-7 секунд (MS Paint запускается мгновенно). Это, кстати, основная причина, по которой я пользуюсь MS Paint намного чаще.
nin-jin
14.10.2022 12:21-5Для современного пользователя 6-7 секунд - это уже мгновенно. Хорошо хоть мода на неубираемые сплеш скрины на время загрузки приложения прошла. А то помню заказчики прям требовали их "шобы как у взрослых".
Fox_exe
14.10.2022 13:19+2У меня NVME.
И когда я говорю "Моментально" - это значит, что в пределах 1-2 секунд.А вот когда я говорю "Медленно" - это реально медленно, заметно дольше 5 секунд (До 10 в случае с Paint 3D).
И это на NVME Samsung Evo 980 (+i5 10600KF)!
А теперь представьте, на сколько медленные штатные приложения, если система стоит на обычном HDD...Про старый ноут с полу-мёртвым HDD на 5400 об/мин вообще молчу...
Leggera
14.10.2022 14:57старый "Просмотр изображений"
"Фотографии" хороши тем, что умеют RAW'ы кушать из коробки. Для меня было неприятным открытием, что старый "Просмотр изображений" так не умеет. На этом мой опыт LTSB/LTSC винды закончился.
Darkhon
14.10.2022 17:21Ну кстати, раньше они этого из коробки тоже не умели. По крайней мере для Win10 поддержка RAW была как дополнение в MS Store, можно было поставить вручную, если знать о его существовании. Это сейчас в Win11 оно автоматом стоит.
PrinceKorwin
14.10.2022 10:59-11Если бы такие мелкие сервисные утилиты отдали на OpenSource
То туда сразу же бы понапихали бекдоров.
JordanCpp
14.10.2022 09:50+4Пустая трата циклов процессора. Лишние и не кому не нужные фоновые задачи. Сейчас это уже норма :(
Anvano
14.10.2022 10:42+11До тех пор, пока разработчики будут считать, что именно их уникальная программа должна в обязательном порядке иметь сервис (а лучше несколько), который постоянно висит в памяти, жрет процессорное время и ресурсы машины, и, естественно, устанавливается автоматически без ведома пользователя - ничего не изменится.
Уровень bloatware в современном ПО просто зашкаливает, покупать ноутбук с OEM операционкой от вендора - это гарантированно поиметь +10-20 перманентно работающих сервисов, делающих непонятно что и постоянно общающихся с сетью. Этакие официальные вирусы, на которые не реагируют антивирусы.
eyudkin
14.10.2022 12:46+3Позвольте придраться к терминологии. Вирусы - это программы, распространяющиеся путем заражения другого ПО. Неправильно называть ими всё подряд.
qyix7z
14.10.2022 14:23+1Придираться, так по полной :)
В обиходе «вирусами» называют всё вредоносное ПО, хотя на самом деле это лишь один его вид.
agmt
14.10.2022 10:47+2Стоит добавить, что в open-source похожие проблемы. Обнаружил, что после запуска диск отвечает очень плохо минут 5-10. Виновник -
mlocate
, зачем-то кеширующий список файлов каждый день (DE: Xfce 4.16). Благо, не сильно много зависимостей за собой утянул при удалении.Akr0n
14.10.2022 10:55LibreOffice тоже с каждой версией все тормознее и тормознее.
JordanCpp
14.10.2022 10:59+1Не только LibreOffice. Все DE, возможно кроме OpenBox. KDE, Gnome, упомянутый Xfce. Повышаются требования к ЦП и ОЗУ.
13werwolf13
14.10.2022 11:17+1icewm не меняется сто лет, и легковесен
в мире опенсорса есть выбор для любого вкуса, надо только поискать
JordanCpp
14.10.2022 11:36Этим меня Open Source и завлёк, правда сейчас в основном на Windows, так как удалёнка. Еще не скоро мы пересядем с иглы майков:(
13werwolf13
14.10.2022 14:52+1кто "мы"?
лично я от мелкомягкого софта уже наверное лет 10 как успешно отказался, что дома что на работе. у меня просто нету столько нервов чтобы с ним работать.JordanCpp
14.10.2022 14:56+1Больше на работе, где бы я не работал, везде юзают продукцию майков. Я С# программист:)
alexander222
14.10.2022 19:46+1В современном мире C# программист к windows не привязан, .net core отлично работает везде. Я сам C# программист, работаю, стыдно признаться, на маке.
JordanCpp
14.10.2022 20:11Это я знаю. Но все зависит от воли начальства от их решения. Ещё требуется определенное время для перехода на linux. Процесс идёт, но хочется побыстрее. Мак это ПК, было бы странно, если бы на нем нельзя было программировать.
vkni
14.10.2022 18:46Видимо, DE — это вещи, делающиеся по-заказу. Когда что-то делается явно для себя, например i3, то оно не распухает. У меня i3 мгновенно отрабатывает на 15 летнем Core 2 Duo. Версия новая (я их регулярно пакетирую). И никакой деградации я не замечаю (возможно она есть, но вот уже сколько лет незаметна).
EfogHD
14.10.2022 18:55Gnome на Wayland у меня работает в недо-4К (3000х2000) с идеально плавными анимациями и моментальной отзывчивостью на 0.6 ГГц. И да, это ещё и тачскрин.
Так что у вас либо устаревший опыт, либо готовить не умеете)
Mike-M
15.10.2022 11:43«в open-source похожие проблемы» — эх… видать индусы и до open source добрались…
А еще пытаются мигрировать кодовую базу на С#, чему я и многие другие активно сопротивляются.iig
15.10.2022 12:00+2Ха-ха :( Индусы хотя бы это делают за деньги..
reference->image->x = (RGBABitmap**)malloc(sizeof(RGBABitmap) * 0.0);
for(i = 0.0; i < xLabels->stringArrayLength; i = i + 1.0){ if(xLabelPriorities->numberArray[(int)(i)] == p){
Вот что курил автор этих строк? Что побудило его использовать double для итераций по массиву?
vassabi
15.10.2022 12:23хмм ... как-то видел интересный вариант кода, который выглядел как странная но некритичная ошибка начинающего программиста - и приводил к взлому (при передаче на вход определенных значений)...
iig
15.10.2022 12:30Ну это библиотека для рисования графиков, слишком затейливо с помощью нее что-то ломать. Скорее всего, она была написана студентом-физиком на basic, а потом её как смогли переписали на все прочие языки.
Mike-M
15.10.2022 12:55Да и в первой строке тоже: даже я, ни разу не программист, знаю, что вызывать malloc без проверки на null — под строгим запретом.
13werwolf13
14.10.2022 11:18+2mlocate кэширует файлы для того чтобы при использовании поиска не сканить весь диск а быстренько дать ответ из бд, и что-то я не припомню дистрибутива в котором mlocate шёл бы из коробке так что скорее всего вы его доставили сами
agmt
14.10.2022 11:47+1В Kubuntu идёт из коробки с добавлением себя в `/etc/cron.daily`:
cdimage.ubuntu.com/kubuntu/focal/daily-live/current/focal-desktop-amd64.manifest
packages.ubuntu.com/focal/amd64/mlocate/filelist
Вероятно, я что-то поставил и оно потянуло зависимость.13werwolf13
14.10.2022 14:51а в серьёзных дистрибутивах оно уже давно не в cron а через systemd таймеры...
0xd34df00d
14.10.2022 18:32+1Gentoo — несерьезный. Ну ок.
13werwolf13
14.10.2022 18:45+1серьёзнее некуда
0xd34df00d
14.10.2022 18:56+1А у меня openrc и все кроны как обычно.
13werwolf13
14.10.2022 19:21Рад за вас, ну или сочувствую, предлагаю на выбор. В общем не знаю я что вы хотите этим сказать
Pastoral
14.10.2022 11:26+2Не похоже что виновник mlocate, похоже что виновник тот, кто настроил запуск updatedb каждый день и не настроил /etc/updatedb.conf.
iig
14.10.2022 11:27зачем-то кеширующий список файлов каждый день
С одной стороны, моментальный поск файла по кешу это иногда очень удобно. С другой стороны, заниматься этим при старте системы как-то тупо. Но анализировать текущую загрузку системы и обновлять кеш более интеллектуально - сложноее..
JordanCpp
14.10.2022 11:05+9Нужно было создать pdf файл, скачал pdf24. Прописывается в автозауск, зачем? Когда закрываешь через трей, выводит бесящую надпись, вы точно хотите выйти из программы. Это было последним раздражающим фактором. Сделал дело, снес.
nin-jin
14.10.2022 12:26+6Очевидно, это нужно, чтобы пользователь думал, что оно запускается мгновенно при нажатии на иконку, а не 10 секунд. Не оптимизировать же софт, в конце-то конов.
osmanpasha
15.10.2022 08:39+2Я под такой шлак виртуальную машину держу. Поставил, попользовался, откатил на старый снапшот. Или не откатил, все равно не жалко, основную систему не засоряет.
JordanCpp
14.10.2022 11:25+2Обновил десктоп на i5-11400. Прирост таки есть. Но провел следующий тест. Открыл каталог WIndows32 в Double Commander и начал быстро скролить вверх и вниз. Собственно вот
5-6% процентов загрузки ЦПУ многовато для такой задачи. GPU в это момент грузиться на 6%. Аналогичный тест на Athlon X4 640 грузит одно ядро под 100%.
Надо бы все таки посмотреть стек вывозов, что же там такое происходит.
saboteur_kiev
14.10.2022 15:19+3юзайте FAR ;)
JordanCpp
14.10.2022 15:33+3Решил протестить древний Windows Commander. Возможны слёзы умиления и повышение артериального давления на фоне нахлынувшей ностальгии:)
anka007
14.10.2022 15:51+2Просто произошло развитие понятия расширения и типа файла. Сценарий использования таков, что пользователю вообще не нужно задумываться над тем, что у него есть какие-то там файлы или что-то подобное, это все особенности технической реализации. Для пользователя есть объекты "картинка", "видео", "документ". ДОступ к ним через соотвествующее приложение.
Но реализация получилась ни то, ни се. Ни до полноценных объектов не доросли, и базовые операции прибили. Поэтому всем, кто работает с чем-то большим чем "картинка" и "документ" необходимо ставить приложения с двадцатилетней историей.
redsh0927
14.10.2022 19:47+3пользователю вообще не нужно задумываться над тем, что у него есть какие-то там файлы или что-то подобное
О да, мечта корпорации — пусть человек даже не пытается думать что у него хоть что-то есть)
dunkelfalke
14.10.2022 17:09+2Total Commander (он сейчас так называется) последней версии 10.51 кушает вообще 4.3 мегабайта и при скроллинге грузит процессор на 0.5%. Думаю оптимизация free pascal помогла, старый был ещё на дельфи написан.
BiOMeX
14.10.2022 17:35+6Виктор Котов: Насколько мне известно, Вы используете Delphi (кстати, какую версию?). Но сейчас появились новые языки программирования (C#, .Net и т.д.). Нет ли планов сменить язык и среду программирования? Какой язык Вы будете использовать в будущем?
Кристиан Гислер: Для Total Commander я все еще пользуюсь Delphi 2.0, хотя у меня есть лицензионная Delphi 7, которую я использую для других проектов. Delphi 2.0 идеальна для меня, потому что она работает очень быстро и выдает очень компактный код. Кроме того, последние версии Delphi создают код, который несовместим с 16-разрядной Delphi. Маленький размер программы важен для меня еще и потому, что я отправляю заказы покупателям на дискетах, но в будущем я планирую перейти на компакт-диски. Также маленький размер важен для скачивания в Интернет. Вот почему ".Net" абсолютно неприемлема для shareware-программистов: пользователям придется скачивать кроме программы еще и 23 мегабайтный дистрибутив ".Net framework" для того чтобы запустить программу.
iig
14.10.2022 17:43+72004 год, программа должна помещаться на дискету.
2022 год, программа должна запускаться.
morijndael
14.10.2022 20:15+7Вообще то программа в 2022 должна приносить бабло, то что она запускается — побочный эффект /j
nixtonixto
15.10.2022 08:04+2Вообще-то в 2022 программа или даже новая версия ОС должна выйти раньше конкурентов, а то что оно криво работает или вообще падает вместе с компьютером — не беда, в обновлениях поправим.
releyshic
15.10.2022 03:52-1" Маленький размер программы важен для меня еще и потому, что я отправляю заказы покупателям на дискетах, но в будущем я планирую перейти на компакт-диски. Также маленький размер важен для скачивания в Интернет. Вот почему ".Net" абсолютно неприемлема для shareware-программистов: пользователям придется скачивать кроме программы еще и 23 мегабайтный дистрибутив ".Net framework" для того чтобы запустить программу " сейчас вот это вообще не актуально
osmanpasha
15.10.2022 08:46Ну как не актуально. Регулярно встречаются программы, которые требуют какую-то новую версию .Net Runtime, которую приходится искать на сайте микрософта, качать и ставить. Размер не важен, но вот потраченное время...
Справедливости ради, это же верно и для нативных приложений, требующих новых версий Visual C++ Redist.
Skykharkov
15.10.2022 09:10+1Ну с .NET 6 уже можно паковать вот прямо все-все в один файл. Удобно и вроде работает. Как для Windows так и для Linux. Т.е. тащить за собой фреймворк не надо. Но размеру ну и скорости запуска примитивнейшего приложения не стоит удивляться. Оно все распаковывает в "temp" и уже оттуда все подгружает.
agranom555
15.10.2022 11:52С .NET 6 "Оно все распаковывает в "temp" неверно.
Skykharkov
15.10.2022 17:15Single file build как раз таки и распаковывает. И запускает из распакованной папки, а не с места где лежит оригинальный executable.
Они для этого даже специальную функцию добавили чтобы получать имя оригинального файла, кстати, а не процесса который действительно исполняется.agranom555
15.10.2022 17:38Это было в 3 версии. Сейчас уже не так. Функция нужна еще, вроде да. Но папка темп уже нет
https://learn.microsoft.com/en-us/dotnet/core/deploying/single-file/overview?tabs=cli
Previously in .NET Core 3.0, when a user runs your single file app, .NET Core host first extracts all files to a directory before running the application. .NET 5 improves this experience by directly running the code without the need to extract the files from the app.
SimSonic
14.10.2022 18:55У меня, к слову, на вин 11 с ним беда. Там прикрутили этот модный терминал, и фар в нем иногда отрисовывается кривовато. Ещё и при запуске по иконке на панели задач уходит во вкладку терминала, и в его значок. Ещё раз кликнул -- держи ещё один новый фар. На 10 такого не было :(
dendron
14.10.2022 11:32+5Можно представить как к этому конкретному багу пришли во время разработки:
Менеджер: ...а ещё нужно в программу для записи добавить список ранее записаных файлов, сроки - должно быть сделано вчера. Проставил время на задачу в жире - полчаса. Всё, я ушёл.
Кодер (на минимальной ставке): "stackoverflow.com", "Ctrl-C", "Ctrl-V", "шлёп", "закрыть задачу".
Менеджер: Работает? Всё, в продакшн, сроки горят. Кстати, зайди потом в отдел кадров...
JordanCpp
14.10.2022 11:34+2И тестер торопился домой, работает, багов нет. В прод.
DikSoft
14.10.2022 11:40+8Тестера уволили ещё до этой задачки
nonickname227
14.10.2022 11:50+8Тестер проверял с тестовой папкой документы/аудиозаписи, где лежат test1.wav и test2.mp3. Тесты прошли идеально.
elve
14.10.2022 11:35Я прошу прощения за такой заголовок, потому что современное ПО может
быть медленным по множеству разных причин. Слепое использование одного
объяснения без малейшего расследования — это программный аналог карго-культа. В этом посте рассматривается один пример того, почему современное ПО может быть мучительно медленным.Этот пример, как и многие другие легко укладывается в определение "программисты нарукожопили". Расследование не меняет этого факта, а лишь раскрывает детали.
Культ-карго будет, если для увеличения производительности, без изучения причин, будет использоваться один и тот же метод/блок кода.
JordanCpp
14.10.2022 11:39Я прошу прощения за такой заголовок, потому что современное ПО можетбыть медленным по множеству разных причин.
Вообще не парьтесь на этот счёт. Я писал заголовки в более агрессивной манере. претензий не было. Я бы конечно заголовок переделал:) Так сказать, полностью отразив всю боль использования современного ПО.
ihouser
14.10.2022 12:03+11Так...
Собираем статистику, умножаем на количество ПК
Пустую трату электричества пересчитываем в эмиссию CO2
Жалуемся в СпортЛото
...
Profit!
Tangaroa
14.10.2022 12:20+3А что вы хотите от софта, который написан вот примерно такими профессионалами, чей код я постараюсь частично процитировать ниже?
if (c=='a') { return 'a';} else
if (c=='b') { return 'b'; } else
if (c=='c') { return 'c'; } else
...и таких строк ещё много - для всех ASCII символов. В общем, идею вы поняли.
Gaikotsu
14.10.2022 21:07Пфф... а как вам такое? Я в свое время когда на это наткнулся в исходниках, в процессе правок кода - долго думал...
public static boolean parseBoolean(final String s) { switch(s.length()) { case 1: { final char ch0 = s.charAt(0); if(ch0 == 'y' || ch0 == 'Y' || ch0 == '1') return true; if(ch0 == 'n' || ch0 == 'N' || ch0 == '0') return false; break; } case 2: { final char ch0 = s.charAt(0); final char ch1 = s.charAt(1); if((ch0 == 'o' || ch0 == 'O') && (ch1 == 'n' || ch1 == 'N')) return true; if((ch0 == 'n' || ch0 == 'N') && (ch1 == 'o' || ch1 == 'O')) return false; break; } case 3: { final char ch0 = s.charAt(0); final char ch1 = s.charAt(1); final char ch2 = s.charAt(2); if((ch0 == 'y' || ch0 == 'Y') && (ch1 == 'e' || ch1 == 'E') && (ch2 == 's' || ch2 == 'S')) return true; if((ch0 == 'o' || ch0 == 'O') && (ch1 == 'f' || ch1 == 'F') && (ch2 == 'f' || ch2 == 'F')) return false; break; } case 4: { final char ch0 = s.charAt(0); final char ch1 = s.charAt(1); final char ch2 = s.charAt(2); final char ch3 = s.charAt(3); if((ch0 == 't' || ch0 == 'T') && (ch1 == 'r' || ch1 == 'R') && (ch2 == 'u' || ch2 == 'U') && (ch3 == 'e' || ch3 == 'E')) return true; break; } case 5: final char ch0 = s.charAt(0); final char ch1 = s.charAt(1); final char ch2 = s.charAt(2); final char ch3 = s.charAt(3); final char ch4 = s.charAt(4); if((ch0 == 'f' || ch0 == 'F') && (ch1 == 'a' || ch1 == 'A') && (ch2 == 'l' || ch2 == 'L') && (ch3 == 's' || ch3 == 'S') && (ch4 == 'e' || ch4 == 'E')) return false; break; } throw new IllegalArgumentException("For input string: \"" + s + '"'); }
0xd34df00d
14.10.2022 21:31+2Хм.
Как бы вы проверили строку на равенство
"false"
без учёта регистра?cepera_ang
14.10.2022 21:36is_false = stroka.to_lower() == “false” не подойдёт? :)
0xd34df00d
14.10.2022 22:03+6Нет, конечно. Мы ж тут разленившихся программистов, не считающих байты и такты, обсуждаем, а у вас там вероятное выделение памяти, да и небось ещё в локаль пойдёте, чтобы правильно обрабатывать всякие ß и прочие смешные символы, да и ещё в зависимости от текущего языка, культуры (или как оно там в дотнете называется) и так далее.
Настоящий Программист™ сделает что-то вроде (пишу на псведоплюсах)
if constexpr (Endianness == BIG_ENDIAN) // или little, лень думать, но мысль понятна { if (s.length() == 5) { uint64_t buf; // ^ кстати, хз, надо ли инициализировать, или я уже сделал UB memcpy(&buf, s.data(), 5); // ^ s.length() вместо 5 нельзя, // не все компиляторы делают constant propagation настолько умно // сбрасываем 6-ой бит в каждом символе из первых пяти, // что в кодировке ASCII превращает маленькую букву в большую, // остальные выставляем в ноль, // чтобы не тратить такты на инициализацию buf конкретным нулём // и всё равно затереть мусор buf &= 0xDFDFDFDFDF000000; return buf == 0x46414c5345000000; } } else // аналогично, только для обратной endianness
где
0x46414c5345000000
берётся как результат аналогичного копирования"FALSE"
:λ> flip showHex "" $ foldl (\acc sym -> acc * 256 + sym) 0 $ (ord <$> "FALSE") <> [0, 0, 0] "46414c5345000000"
Ещё надо добавить куда-нибудь
static_assert
, чтоCHAR_BITS
равно 8, а то всякое бывает.cepera_ang
14.10.2022 22:08+3Да-да, и в итоге на такое байтоёбство уйдут все ресурсы разработки и на вычищение херни как в исходном посте уже не останется сил. А функция сравнения с false будет вызывать целый один раз, при парсинге аругментов командной строки этого калькулятора, который в 99.999% случаев запускают вообще без аргументов.
0xd34df00d
14.10.2022 22:11+1Да-да, и в итоге на такое байтоёбство уйдут все ресурсы разработки и на вычищение херни как в исходном посте уже не останется сил.
Более того, на добавление херни как в исходном посте уже не останется сил!
mayorovp
14.10.2022 22:02+1Ну, у нас это делается вот так:
str.Equals("false", StringComparison.OrdinalIgnoreCase)
. В Java наверняка должен быть столь же простой способ...Gaikotsu
15.10.2022 00:14Так вот в том то и дело что тот же стандартный метод Boolean.valueOf(String s) как раз так и проверяет, просто как
return s.equalsIgnoreCase("true");
т.е. просто и лаконично и этого бы хватило за глаза.
К чему было городить то извращение, что я выше привел - я так и не понял.
Метод если что использовался чисто для распарса булевых параметров из конфигурационных файлов и при этом там в качестве значений используются только true/false, но никак не 1/0, on/off и т.п.daggert
15.10.2022 00:44Все что говнокоженного выше - не приведение в lowercase. Если система подразумевает модульность и заполнение конфига левыми людьми - вполне себе неплохой вариант думать про Y/N 1/0, Yes/No и т.п., сам так извращаюсь.
Gaikotsu
15.10.2022 03:42+1Ну даже с учетом таких вариантов можно было написать намного короче и логичней, например так:
public static boolean parseBoolean(String s) { if (s.equalsIgnoreCase("true") || s.equalsIgnoreCase("yes") || s.equalsIgnoreCase("on") || s.equalsIgnoreCase("y") || s.equals("1")) return true; else if (s.equalsIgnoreCase("false") || s.equalsIgnoreCase("no") || s.equalsIgnoreCase("off") || s.equalsIgnoreCase("n") || s.equals("0")) return false; throw new IllegalArgumentException("For input string: \"" + s + "\""); }
Даже если такое будет работать чуть медленнее чем тот код - в том месте где это использовалось это вобще не критично.
Тот код, что я приводил примером ранее, если что взят из одной из веток java-эмулятора Lineage II. Ну и да там с качеством кода зачастую все достаточно печально, т.к. в процессе развития исходники зачастую проходят через множество людей, с разной степенью кривизны рук и каждый пишет так как видит "лучше".
osmanpasha
15.10.2022 08:55+1Изначально же про производительность говорили, надо было хотя бы в начале функции сделать что-то вроде
String s_lo = s.toLowerCase();
и использовать обычное сравнение.
inkelyad
14.10.2022 22:19+1Можно вручную сделать небольшой конечный автомат, который и будет выдавать искомое. Но только вот понять такую функцию будет совершенно невозможно.
Еще можно при помощи gperf сгенерить не менее непонятное выражение, сравнив результат которого один раз с числом тоже получим искомое.
0xd34df00d
14.10.2022 22:27+1Мне вот неочевидно, что будет быстрее — КА (и не обязательно руками, есть же какой-нибудь ragel) или свитч по длине строки и байтоложество в стиле комментария выше. По идее, КА будет существенно хуже, потому что для строки в 5 символов это уже будет больше десятка сравнений для худшего случая совпадающих строк (и одно для лучшего случая несовпадающих сразу), а для кода как у автора — вообще инструкций будет дофига, I-кэш вымывается, ну его. Для байтоложеского случая выше — один свитч по длине строки (разворачивающийся здесь в джамп по таблице по индексу) плюс где-то одно-три сравнения в каждой ветке (по количеству возможных паттернов этой длины).
Playa
15.10.2022 12:35А можно взять compile-time регулярку
inkelyad
15.10.2022 13:18Там выше я в сарказм немного не смог. Насчет того как написать оптимально, но совершенно непонятно. На практике я бы switch c нужными строками в качестве вариантов выполнения написал и пускай компилятор/среда выполнения разбирается, как это индексирование по конечному набору коротких строк оптимизировать. Что они должны бы уметь - теория уже немало лет известна.
Оно хотя бы понятно было бы, что вот это - это у нас true, а вот это - false.
Tangaroa
14.10.2022 22:05+1Это плохой код. Ну кто так называет переменные? ch0, ch3... Имена переменных должны быть длинными и понятными. Например, DlinnoePonyatnoeImyaPeremennoy1, DlinnoePonyatnoeImyaPeremennoy2,...
v1000
14.10.2022 22:20Где-то слышал байку, что это из-за того, что программистам платят на основе количества строк кода, которые они написали. Поэтому им не нужно делать быстрый и простой код - им необходимо делать как можно больше проверок, там, где можно обойтись одной.
Celestial_Parallax
14.10.2022 12:29+4По моему, это очевидная экономия средств. У вас есть выбор - либо нанять отдел дорогих программистов на плюсах, которые сделают качественное ПО, но стоят очень дорого, либо нанять столько же индусов за копейки которые сделают это на самом модном фреймворке. И плевать, что этот фреймворк тоже основан на другом фреймворке написанном другими индусами. Главное, что при отчёте инвесторам мы отчитаемся о экономии средств.
Так и множатся уровни виртуализации. Отсюда и скорость падает, когда каждый фреймворк собирает для себя статистику и ведёт свои кэши.
PKav
14.10.2022 15:30Такая экономия средств допустима для малого и, может быть, среднего бизнеса. Но когда доходы превышают расходы в несколько раз, думаю, можно уже позаботиться и о качестве продукта.
Celestial_Parallax
14.10.2022 17:14+2Как раз наоборот. Когда доходы превышают расходы в сотни раз, можно позволить себе снижение качества продукта, для дальнейшего увеличения доходов, а также увеличения маркетинга в продукте.
При таких объёмах и фактическом доминировании на рынке, о качестве думают в последнюю очередь.
vkni
14.10.2022 18:49+2Вы неявно заметаете под ковёр то, что у нас капиталистическая экономика. А значит, главная цель любого бизнеса — это прибыль. Качество продукта в случае околомонопольного положения коррелирует с прибылью достаточно слабо.
0xd34df00d
14.10.2022 18:39+1либо нанять отдел дорогих программистов на плюсах, которые сделают качественное ПО
На плюсах будет относительно быстро, но с дырками.
Выбор на самом деле сильно шире, и двумя озвученными вами опциями не ограничивается.
sergeyns
14.10.2022 13:12Кстати, 40к файлов для одной папки - это очень много для винды... Торможения на 40 секунд - это еще легко отделались!
saboteur_kiev
14.10.2022 15:20+1почему для винды?
Для любой ОС, если работать с такой папкой в GUI.
А вот для прямого обращения - NTFS на самом деле весьма неплохая файловая система.iig
14.10.2022 15:58Для любой ОС, если работать с такой папкой в GUI.
Потомушто как поступает кодер? Есть контрол, который умеет работать со списком файлов - загрузили в него список, 2 строчки кода и фича готова. А то что список готовится не мгновенно, и что со скроллируемым списком в 40 000 элементов всё равно невозможно работать - про это думать некогда, нужно прыгать.
cepera_ang
14.10.2022 20:17Почему всего 40 тысяч объектов — это должно быть проблемой для современных компьютеров?
DirectoriX
14.10.2022 22:08Пальцем в небо: потому что некоторые алгоритмы (та же быстрая сортировка при неудачных входных данных) работают за квадратичное время?
cepera_ang
14.10.2022 22:17Ну да, и поэтому стоит тестировать свои поделки на сотнях тысяч и миллионах объектов, чтобы случайно не зашипить квадрат и не позориться :)
Вероятность того, что случайно сортировка вдруг превратится в квадратичную — довольно мала, но всегда можно пошафлить за линию перед ней, если есть такие опасения.
0xd34df00d
14.10.2022 22:20+1Вероятность того, что случайно сортировка вдруг превратится в квадратичную — довольно мала, но всегда можно пошафлить за линию перед ней, если есть такие опасения.
Убив потенциально часто встречающиеся хорошие кейсы сортированных или почти сортированных данных (которые в адекватных библиотеках обрабатываются отдельно).
Короче, писать код сложно.
Впрочем, есть алгоритмы сортировки с неплохими константами и nlogn и в худшем случае, так что непонятно, зачем привязываться именно к быстрой сортировке.
iig
14.10.2022 22:18Если эти обьекты автоматически и неявно для программиста сортируются (или индексируются), например - это проблема для любого компьютера.
saboteur_kiev
14.10.2022 23:40Потомушто как поступает кодер? Есть контрол, который умеет работать со списком файлов - загрузили в него список, 2 строчки кода и фича готова.
Чего?
Это файловая система. Пока пользователь думал что нажать, а потом нажал сортировку, в каталоге могло появиться еще сто новых файлов. Поэтому все менеджеры и перечитывают список.
У меня 200 тысяч файлов лет 20 назад минут 20 считывался под NTrandomsimplenumber
15.10.2022 08:59+4У файлового менеджера основная задача - список файлов показывать, даже если он длиной 200000. Правда, этот список бесполезен чуть более чем полностью - на экран он не помещается, и скроллить его невозможно. А в приложении звукозаписи, скорее всего, каждый элемент списка в потрохах ещё и метаданные парсит по индийской методике. Имхо, GUI для списка в 100 элементов и для 100 000 элементов, для начала, нужно проектировать по разному.
Qvxb
14.10.2022 13:29При выполнении операции, не позволяющей пользователю работать с приложением, честнее использовать шкалу прогресса или курсор ожидания. UI Записи голоса всегда реагировал на взаимодействия, но на самом деле это было ложью — кнопка записи должна быть отключена, пока приложение не готово.
Чтобы сделать шкалу прогресса нужно делать еще один поток, т.е первый - интерфейс, а второй - шкала с задачей, далее появляется взаимодействие потоков чтобы кнопка на интерфейсе изменяла активность правильно, в общем сроки горят а надо уже вчера.
cepera_ang
14.10.2022 20:19Проблема как раз в том, что разные потоки там и есть и в современном софте не принято отключать элементы интерфейса, а асинхронно кидать события с них в какую-нибудь очередь, где висит прошлый таск на сканирование файлов. Так что жмёшь, жмёшь на кнопки, они вроде бы нажимаются, а на самом деле ничего не происходит.
Qvxb
14.10.2022 20:50Проблема как раз в том, что разные потоки там и есть
Ну вот для шкалы сканера файлов надо было бы еще 1 делать.
Так что жмёшь, жмёшь на кнопки, они вроде бы нажимаются, а на самом деле ничего не происходит.
Не очень хороший подход имхо, но значит менеджер одобрил.
Shura_m
14.10.2022 13:43+14А вы видели сколько занимает памяти калькулятор в windows 10 ?
windows 95 - целая ОС - занимала меньше !
Судя по размеру памяти, калькулятор хранит все мои вычисления с момента поступления в школу.
ihouser
14.10.2022 14:58+2Предположу -- разрабу было лень писать код, поэтому запустил windows 95 в ВМ, запустил калькулятор на фулскрин и все это добро упаковав в экзешник сдал в прод.
anka007
14.10.2022 15:28+4Ну так оно работает и считает по правилам. Вы знаете сколько там всяких правил оказывается?! И порядок действий соблюдай, и скобочки контролируй, и за переполнениями и исключениями следи! После того, как QA в **тый раз вернуло задачу пришлось так сделать.
PS: а хорошо, что тесты подошли от прошлой версии калькулятора!
Physmatik
15.10.2022 17:18Мы такие калькуляторы с порядком действий и скобочками писали в 10-м классе. Дельфи выдаёт полтора мегабайта полный стэндэлон.
redsh0927
14.10.2022 15:22+1Не только медленное, но и крайне убогое функционально и по юзабилити.
Причина одна — нынче его пишут «нормальные люди» для «нормальных людей», а не профи для профи…
gandjustas
14.10.2022 15:43+1Ответ простой:
Потому что эти утилиты вроде Voice Recorder писались студентами. Это не шутка и не утрирование. На презентации Windows 8 и WinRT было сказано что эти утилиты были специально написаны с нуля на WinRT, хотя не было большого смысла переписывать. И для переписывания набрали студентов (interns) чтобы показать что это очень легко.
Так как программа записи голоса в винде очень непопулярная, весь монтаж видео и звука делается в более профессиональных программах, то улучшать её никто не собирается.
stanislavskijvlad
14.10.2022 15:46+1хоспадиии, как же на SuSE хорошо...
anka007
14.10.2022 15:57+1Недавний опыт показал, что линукс все еще далеко от юзабельности "из коробки". Но если ваш сценарий использования далек от "запустить браузер, посмотреть киношку" и в любом случае придется много чего настраивать, и главное есть кто всем этим будет заниматься - линукс хорош. Идеальный вариант "полазать по сайтам" и "посмотреть киношку" - эппл, но там отходить от заданого сценария использования больно. Промежуточный вариант - винда, что-то настраивается по советам из гугла, но большинство функций работоспособны из коробки.
JordanCpp
14.10.2022 16:02Лет 5 как Linux дорос до домашнего применения. Проблемы могут быть лишь в не поддерживаемом железе и вероятность найти такое железо, крайне мала:) Но я не играю в современные игры, потому не знаю насколько это проблемно. Возможностей Wine мне хватает.
anka007
14.10.2022 16:04+1На ноуте? ха-ха. Опыт настраивания на нескольких машинах нескольких дистрибутивов.
JordanCpp
14.10.2022 16:09У меня дома 2 ноута и 2 ПК, на всех стоит доп системой Lubuntu и даже печать работает. Чудеса.
anka007
14.10.2022 16:40+3Спящий режим - танец с бубном, желательно на "чистой" машине. Регулярно что-то при обновлении ломается. Сканер отпечатков пальцев не работает принципиально. Поддержка переферии - всегда лотерея, надо внимательно изучать.
0xd34df00d
14.10.2022 18:41+1А как на тех же ноутах чувствует себя упомянутый вами как идеальный вариант эппл?
anka007
14.10.2022 19:09+1Эппл живет на своих эппловских ноутах. Благодаря минимальному разнообразию железа живет хорошо. Да и вообще эппл сильно против разнообразия железа. И к поддержке стороннего зоопарка переферии относится насторожено и требовательно, чтобы было или "работает без проблем", или "не работает совсем" и не было "да что за ерунда происходит с этой штуковиной" (ну согласитесь - с линуксом нормально потратить несколько часов своего времени, прежде чем смириться что вот именно эта логитеховская блютусная клавиатура не работает в линуксе, ни так, ни сяк, ни наперкосяк. С эпплом просто возьмут другую модель клавиатуры, желательно производства эппл. А если не работает в виндовсе - то это просто брак)
thevlad
14.10.2022 16:18Поставил домашним Kubuntu из коробки, ноут и два системника. Полет нормальный, подмена даже не была особо замечена. Главное показать "куда кликнуть, чтобы интернет запустить" )
anka007
14.10.2022 16:45+1Потому что вы всем этим занимались, и в случае любого вопроса тоже вы будете заниматься, и задач сложнее "запустить инет" не возникает. Это же не ваша мама (или кому вы объясняли куда кликать) взяла в магазине готовый ноут с линуксом, ввела пароль от вайфая и оно все заработало и проблем не было, это знающий человек донастроил так, чтобы осталось кликнуть. На самом деле это достаточно высокая квалификация даже для эникея. Да даже объяснять куда кликать для инета пришлось! Представте, что вы поехали в командировку в уганду на пол года, а вас российский родственник уровня "объясни куда кликать" попросил вот прям срочно без ограничения по деньгам что-то выбрать, чтобы видео в одноклассниках смотреть и мемуары писать. Посоветуете кубунту?
У меня целевой рабочий софт линуховый, и многие коллеги предпочитают винду с линуксом на виртуалке. Потому что проще и понятнее простому пользователю, не связаному с администрированием компьютеров.
Решение всех остальный задач "как сделать ..." под линуксом обычно начинаются с "выполните в терминале 'sudo ....' " и далее откровенное шаманство понять и запомнить которое практически невозможно.
thevlad
14.10.2022 17:24Ну в моем случаи кубунта встала прямо из коробки, если бы конечно было какое-то специфичное железо, все было бы ни так весело. По моим наблюдениям настроенный линукс сломать сложнее винды. Конечно, если стоит вопрос поддержки, то ни все так однозначно.
anka007
14.10.2022 18:49-1За последние несколько лет видела несколько вариантов, всегда были подводные камни и проблемы.
Ну вот года три назад своя эпопея. Второй домашний ноут, делл, задача - видео да интернет. Возраст, когда хотелось ковыряться и настраивать прошел, хочется просто включить и пользоваться. Первый дистрибутив. По отзывам - ноль проблем, все из коробки. Эй, а что со спящим режимом и внешним монитором?! Да это не тот дистрибутив! Вот следующий "ноль проблем, работает из коробки". Опять спящий режим? Понятно, ждать не стоит, настроили. Пришло обновление. В новой версии ядра не работает вайфай на ноуте, совсем, баг известен. Системе неделя, там кроме нескольких картинок ничего нет. Сносится, ставится следующий "ноль проблем, работает из коробки". В обновлении сам себе ломает граб (баг уже известен), грузится только оемный виндовс. ОК. Понятно. Объединить разделы диска.
С рабочим ноутом тоже не все гладко, переодически требуется "sudo чтототам" по рецептам из гугла, благо общая подготовка позволяет это делать. Но вот родственникам, с короторыми я не живу рядом, или если бы это был единственный доступный компьютер в семье, я бы ни в коем случае не советовала бы связываться с линуксом.
grumbler66rus
14.10.2022 17:281) "Но если ваш сценарий использования далек от "запустить браузер,
посмотреть киношку" и в любом случае придется много чего настраивать, и
главное есть кто всем этим будет заниматься - линукс хорош. "
2) "Потому что вы всем этим занимались, и в случае любого вопроса тоже вы
будете заниматься, и задач сложнее "запустить инет" не возникает. ...это знающий человек донастроил так, чтобы осталось кликнуть."
Вы себе же противоречите.anka007
14.10.2022 19:02-1Ага. Даже под запустить браузер и посмотреть киношку надо настраивать. Начиная с выбора дистрибутива. При этом люди, которые работают с линуксом зачастую настолько привыкли к этим мелким задачам по настройке и установке, что почти их не замечают, они воспринимаются как что-то само собой разумеющееся.
Пример: возьмите любой комп/ноут с оемной виндой. То, что он заработает после нескольких эникеев и ввода паролей не вызывает сомнения. А вот вставляя флешку с линкусом всегда есть немного драйва "а заработает ли". Будет ли "ого, печать сразу заработала" под виндой? Нет, это само сабой разумеется. А под линуксом обращает на себя внимание, ну надо же!
grumbler66rus
14.10.2022 20:03+8"Ага. Даже под запустить браузер и посмотреть киношку надо настраивать. Начиная с выбора дистрибутива. ... Пример: возьмите любой комп/ноут с оемной виндой."
Сначала вы ведёте речь о запуске браузера, который надо настраивать.
Затем перескочили на установку системы на компьютер
Пример у вас и вовсе про предустановленную систему.
Это у вас три софистических приёма:
- доведение до абсурда
- подмена темы
- переменные условия
Начну с примера.
Пример: возьмите любой компьютер или ноутбук с предустановленным GNU/Linux, примеры ноутбуков в продажеМой сын, ему тогда было 7, без каких-либо сложностей стал сразу смотреть мультики с Youtube на Nettop Acer Veriton N4660G с предустановленным Endless Linux. Он и подключал этот неттоп к телевизору сам, всего лишь переткнул два кабеля и включил в розетку.
Продолжим выбором дистрибутива.
Выбор дистрибутива ОС означает, что ОС на устройстве не установлена производителем. Большинство современных компьютеров (ноутбуков, неттопов) продаются без дисковода.
В настоящее время продажи windows в России прекращены, но где-то ещзё есть остатки, там Windwos 10, windows 11, windows 8.1. Выбор, однако!
Если говорим о скачивании с торрентов, во-первых, выбор ещё шире, от Window 7 как минимум, да и версий windows 10 существенно больше одной, и во-вторых, до торрентов ещё нужно суметь добраться и суметь оттуда скачать.
И неизвестно, какая из этих ОС будет нормально работать на конкретном устройстве (не для всех из них есть драйверы).
Далее. как вы думаете, что будет делать условный домохозяин(ка), купив дистрибутив windows, и обнаружив, что там DVD, а привода нет. И если это нетбук, его даже вставить некуда, не говоря о потере гарантии в результате разборки устройства.
Если речь о скачивании, то, скачав ISO, он сначала не будет понимать, что делать, и только обратившись к более-менее специалисту или чайнику-соседу-приятелю-другу, узнает, что нужно записать файл на флешку. Записав его на флешку, наш персонаж внезапно обнаружит, что система с флешки не загружается - потому что записывать нужно специальной программой, а инструкция в комплекте отсутствует.
Ну и потом будет танец с бубном по поиску и установке драйверов.
Теперь берём линукс.
У всех дистрибутивов линукса образ флешки скачивается с официального сайта. У всех популярных дистрибутивов на сайте есть подробная инструкция по её записи на носитель на той же странице, где есть ссылка на скачивание. Скачав образ и программу, записав на флешку и установив в компьютер, человек получает рабочую систему. А может и просто в live-системе с флешки работать.
И, наконец, настройка браузера.
Вы удивитесь - браузер в свежеустановленной Windows запустится только после того, как вы ответите там на несколько заковыристых вопросов.
В Linux предлагаемый в зависимости от дистрибутива Firefox, Chromium или Opera лишних вопросов не задаёт, а сразу открывает начальную страницу и страницу с информацией.Ritan
15.10.2022 03:36+1Начальную страницу-то оно может быть и покажет, а вот дальше.
Вчера потратил минимум 3 часа на настройку аппаратного ускорения видео и не победил. Firefox запускается и работает, но выдаёт, что любое декодирование blocklisted by gfxInfo. Хром отказывается ускорять какие-либо форматы видео, кроме h264, хотя драйвер их поддерживает. Chromium вообще отказывается включать ускорение в сборке без специальных фиксов. В результате плюнул и перезагрузился в винду, где тот же firefox просто поддерживает это всё сразу после установки.
Ситуация в Arch и Ubuntu одинаковая - в обоих я максимум получил поддержку декодирования только маленькой части форматов( например ни vp9, ни hevc не работают ). Что примечательно, mpv те же форматы отлично открывает с ускорением, т.е. списать всё на баги драйвера нельзя.
Всё действо происходило на ноутбуке с ryzen cezanne и amdgpu драйвером, от которого в восторге всё комьюнити Linux.
Не поймите неправильно, для разработчика Linux отличная система, но вот для домашнего использования "поставил и забыл" - нет.
saboteur_kiev
15.10.2022 04:33помотреть ютуб сейчас можно с любого утюга.
Если 90% задач пользователь может сделать из условного firefox, то ему вообще все равно какая ОС стоит.
event1
14.10.2022 17:34+1Это для вас "ПО медленное", а для индустрии — населению под те же самые задачи каждые два года новые железки продают. Понимать надо.
Serpiph
14.10.2022 17:35У меня подобные проблемы с MS Word, причём разных версий, от 2010 до 2019. Открываю документ, начинаю с ним работать. Постепенно начинает тормозить и спустя полчаса каждое нажатие символа или клавиши курсора занимает у него от 0,5 до 3 секунд. Нажал кнопку и ждёшь, пока он этот символ вставит в текст и выведет его на экран. Перезапуск всей программы "с нуля" восстанавливает скорость, но опять ненадолго. Словно сохраняет все-все мои действия. И это на ноуте 8750H с 64 ГБ памяти и SSD на борту. Как лечить непонятно. Остальные программы, в том числе и LibreOffice, таких проблем не имеют.
vtal007
14.10.2022 18:26проверка на другом компе, чистая установка с нуля. Лечение проблем известное
Может майнер, может диск концы отдает.Serpiph
14.10.2022 22:42На трёх разных машинах (один стационарный и 2 ноута) и на разных дистрибутивах Office повторилось. Лишь 2 момента одинаковые: лицензионный Kaspersky и каждый раз новая купленная официально лицензия Office, а установщик скачивал каждый раз с сайта Microsoft. Это всё сбивает с толку.
cepera_ang
14.10.2022 20:21+2Какую-нибудь синхронизацию OneDrive отключить. И вообще разлогиниться из учётки. Такие тормоза — это характерный признак того, что что-нибудь в сеть отправлять пытается, а нужный адрес заблокирован или ещё какие-нибудь проблемы.
daggert
15.10.2022 00:20+1Интересный вы баг словили. У меня в организации работают все на 2010 и с файлами по 300-500 страниц, такого не видел. Если найдете в чем была проблема - создайте пост на хабре или мб хотя-б тут отпишитесь пожалуйста.
Serpiph
16.10.2022 08:49Решился на эксперименты, начал искать причину тормозов, когда после открытия документов даже простое движение курсора по тексту начинает всё больше и больше тормозить. На ноуте стоит только одна версия MS Word, других не ставил никогда.
В сети на сайте поддержки Microsoft мне на глаза попалось предложение с запуском редактора в безопасном режиме с ключом "/safe", это дало направление для поиска, так как с ним тормоза пропали. В том же сообщении было написано, на что же влияет этот самый ключ. Так я вышел на надстройки.
В надстройках нашлись как объекты COM, так и "действия". Начала постепенно каждую строку отключать. Оказалось, что причиной тормозов оказалась COM-надстройка от Flir Report Studio - приложения, с помощью которого создаются отчёты по результатам обследования с помощью тепловизоров Flir.
Да, у меня стоит и Abbyy FineReader, но его надстройка не мешает работе Word. Во всяком случае, там том коротком промежутке времени, что я отводил для стресс-теста. Пока отключил только Flir Report Studio, буду следить дальше.
Jurij_taurex
15.10.2022 15:28+1Ну, во-первых он и сохраняет все ваши действия с определенной частотой - фоновое сохранение.
Если на одной ОС установлены разные версии ворда, то в шаблонах, скорее всего, сплошная каша и это замедляет работу каждой из версий в опреденной степени, особенно самой старой. Итого, удаляем все версии, лезем в реестр ищем остатки, лезем в скрытые папки пользователей и тоже ищем остатки. После этого ставим одну версию на одну ОС.
Если на одной ОС стоит одновременно ворд и, например, Абби лингво, файнридер, промт (и это только самые массовые доп проги), то черти что творится и в шаблонах, и в надстройках. Например, одну и ту же функцию проферки орфографии одновременно пытаются делать и ворд, и Абби, и промт, и даже Вин 11 (вроде есть у нее встроенная служба, чи функция). Лезем в настройки ворда, в пункт надстройки и отключаем там все, что нам не нужно, и в винде тоже.
Плюс, есть нюансы по типу, если документ создавался на ворде 2019, в нем есть сжатые(по меркам 2019-й версии картинки), то открыв такой документ в ворде 2010, получим, скорее всего, торможение при приближении к этим картинкам. Старая версия в плане картинок, формул и еще хрен знает чего работает совершенно по иному. В смысле ей на то время(а это, ребзя, 12 годиков тому) попросту не требовались такие возможности.
Ну, это как предположения. Основанные на личном опыте и опыте разной степени знакомых.
acordell
14.10.2022 19:11Давно этому не удивляюсь... Как-то имел удовольствие общаться с людьми работавшими в MS в разное время на разных позициях на разных проектах, в том числе и на винде, в том числе и в разработке. Увы, но многогранное и емкое слово "бардак" практически полностью передает состояние разработки в данной корпорации. Казалось, что такая крупная контора, с такими ресурсами, настолько притягательная для карьеры... Вот где-где, а у там-то все должно быть по уму, но.... нет.
Vitalley
14.10.2022 19:54+2Оставлю это здесь, весь ответ на статью в одной картинке.
Ritan
15.10.2022 03:44+3Нужно уточнить, что на последней картинке каждый костыль - такое же дерево, требующее как минимум втрое больше ресурсов, чем сама хотелка пользователя. И каждый содержит драйвер контроллера Xbox 360
nixtonixto
15.10.2022 08:23Почему у RuntimeBroker сканирование занимает в 5-10 раз больше времени? В этой папке у меня всего около 44 тысяч документов, что за фильтрация используется, которая добавляет на каждый файл лишние полмиллиона тактов?
Вот поэтому я сразу сортирую файлы по подкаталогам и для каждой программы по возможности назначаю свою папку. Чтобы не было этой помойки из 44000 файлов в папке Мои документы, да ещё с именами типа 45a3d23ec4b299ad.pdfiig
15.10.2022 11:38я сразу сортирую файлы по подкаталогам и для каждой программы по возможности назначаю свою папку
Делаете работу, с которой лучше справился бы компьютер ;) Увы же, если продолжать ездить на древних абстракциях, в которых данные это файлы, а файлы хранятся в файловой системе с каталогами, так и будет. К революции типа использования дополнительных атрибутов или базы данных вместо файловой системы мы (и 100500 уже существующих программ) не готовы.
progchip666
15.10.2022 10:39+1Универсальность и ускорение процесса программирования за счёт использования библиотек требует жертв. Когда то Спектрум обходился 16 К ОЗУ в которой ещё и графика умещалась!
vassabi
15.10.2022 12:33+1все же то была графика уровня спектрума, сейчас это будет только для "теплой ламповости"
Mike-M
15.10.2022 12:27Команда dir /s может отсканировать мою папку с документами менее чем за две секунды. Почему у RuntimeBroker сканирование занимает в 5-10 раз больше времени?
Из личного опыта: потому чтоdir
выполнен на компилируемом языке, аRuntimeBroker
— на интерпретируемом.
Не уйду с CPP-приложений до тех пор, пока их не перестанут выпускать.кнопка записи должна быть отключена, пока приложение не готово.
При этом пользователю должно быть понятно, по какой причине кнопка записи сначала отключена, а потом волшебным образом становится доступна.Похоже, в переписанной версии этого бага нет
Интересно узнать, остался ли Runtime Broker в переписанном приложении Sound Recorder?
У кого Windows 11 посмотрите, пожалуйста.я опасаюсь за мир ПО, в котором приложения не исправляются, а переписываются.
Я больше опасаюсь за мир ПО, в котором наивысшим приоритетом при разработке приложений является только одно правило — fast time to market.iig
15.10.2022 12:37потому что
dir
выполнен на компилируемом языке, аRuntimeBroker
— на интерпретируемом.Потому что dir - обертка вокруг нескольких системных функций, а
RuntimeBroker -
НЕХ выполненная в виде отдельного процесса. Там может что угодно случиться, начиная с лагов межпоточной синхронизации.Mike-M
15.10.2022 12:58Лаги синхронизации — это да.
Но и то, что системные функции написаны на компилируемом языке, тоже не стоит сбрасывать со счетов )
progchip666
15.10.2022 12:56Согласен с последнем утверждением, и это безусловно играет на "утяжеление" реализации программного кода. А кроме того, кто будет покупать новое железо если старое не будет тормозить на новом ПО.
AetherNetIO
15.10.2022 15:28Любил Винду за то, что можно всё настроить, выключить. Софта валом. Но теперь же эти автообновления…
А вот по теме: msvc компилирую и запускаю проект на старом компе - 10 минут. На новом i9 - 30 секунд. Из которых 10 на запуск. Разыскал - антивирус. Каждый новый билд сканирует. В исключения добавил, выключил вообще все проверки. Всё равно 5 сек по менеджеру задач съедает антивирус. Правил реестр. Всё равно никак. Мне работать нужно. Дайте инструмент.
perfect_genius
15.10.2022 21:43Прям презумпция виновности программиста какая-то. Мол, а не вредонос ли создаётся.
isadora-6th
Если установить VisualStudio то в простое (когда пользователь не трогал мышь 5-10 минут). Виндоуз запустит перекеширование C# приложений (которых у меня нет, я ставил для cl.exe), и будет это делать бесконечно... Просто так. Гудируя куллерами, т.к. проц игрового гроба делает 45W тепла эффективно шумя.
Задачу можно посмотреть в планировщике taskschd.msc. Зачем? Чтобы что? Почему?
Также из приколов, все powerplan винды не дают ядрам парковаться в максимальное энергосбережение при малой загруженности т.к. в настойках электропитания стандартно стоит 5% минимальное состояние процессора. Ставишь 0, в моём случае процессор вместо 5W начинает кушать меньше 1W.
MS вообще веселые, вот есть Word 2021, если открыть в нём формулы, то ворд повиснет на 10-15 секунд (боже оно к счастью в другом потоке грузит) просто чтобы подгрузить превью. Перемотка вверх вниз документа в ворде мало того, что меньше 30FPS дает на intel UHD 630, так вгружает её в потолок. Зачем? 630 графика это достаточно сильно, это ~30 кадров в 1980 разрешении в играх. Ворд это блокнот со свистоперделками.
AutoCAD... Я не знал, что 1050Ti это базовый уровень графики, ведь 60 кадров в думе этернал... на 2к. Пролаг на 1.5 секунды после каждой новой точки при рисовании линий, если не поставить карточку как базовый режим с угловатыми кругами. И это в пустом (!) проекте, без ничего... Что оно там столько времени делает?
Visual Studio... как-то я захотел попользоваться приличный дебаггером после VSCode, т.к. занимался пердолингом с байтами в C++. Открыл вижлу, сделал хелловорлд проект... И был неприятно удивлен, что лаг на ввод СИМВОЛА ~0.3-0.7 секунды. Я на телефоне быстрей печатаю. Видимо i7-8750H и 16гб ddr4, это мало для редактирования текста. Компуктер слабоват. А говорят электрон тормозной)))
А мы пользователи никогда с этим ничего не сделаем)
MAXH0
>> А мы пользователи никогда с этим ничего не сделаем)
Мы, пользователи, выберем менее тормозящие программы и OS. Хотя огромная проблема - пресловутый qwerty- эффект. Всем нужна такая же программа как у коллеги для совместимости. Соответственно, возникает ползучая монополизация. Конкуренция гибнет. А монстры-монополисты перестают развиваться.
Именно поэтому я полагаю полезным искусственное навязывание конкуренции. Когда пользуешься не самым распространенным при любом удобном случае, когда есть альтернатива.
Self_Perfection
Я согласен, что если бы пользователи чаще руководствовались отзывчивостью и производительностью софта при выборе инструмента для решения своих задач, это бы очень помогло снизить проблему bloatware.
Но теперь хорошо бы придумать как прийти к такому состоянию. Сейчас руководствоваться такими критериями крайне сложно. Как пример: попробуйте выбрать bittorrent клиент или просмотрщик фотографий опираясь на их производительность и не проводя собственных бенчмарков. Хоть какие-то сравнения производительности просто невозможно найти! А многие пользователи просто даже и не в курсе, что программы могут кардинально отличаться по этим параметрам.
Ну и что мы с этим можем сделать? Хотя бы в своей небольшой дельта окрестности?
MAXH0
Знаете что я отвечу? Те, кто не смотря на звание олдфага, предпочитают набирать в Vim или даже Emacs, руководствуются именно отзывчивостью и гибкостью. Без всяких бенчмарков чувствуется разница. Я больше скажу - если разница не чувствуется и требуется бенчмарк, то разница и важна пользователю. Мне одного раза достаточно было утром не суметь включить ноут из-за обновления, чтобы переустановить OS. (Хотя, разумеется, еще и потому, что на стационарном у меня давно другая OS).
А просмотрщик фотографий я буду выбирать по таким параметрам, что отзывчивость будет, возможно, и не в первой десятке. И это норма.
0xd34df00d
А потом оказывается, что vim существует не сам по себе, а в терминале, а терминал, умеющий нормально рендерить уникод, лигатуры и всякие undercurl (привет Konsole, пять лет уже unconfirmed), тормозит или жрёт память. Kitty прямо сейчас у меня потребляет 600 мегабайт. Куда? На что? Загадка.
isden
К слову о макоси :)
Аптайм 46 дней. iterm открыт все это время. Запускалось примерно до 15 вкладок одномоментно, в них делалось всякое разное. Сейчас активно 5, и схавано в данный момент 358 метров.
Self_Perfection
Ваша мысль в том, что не обязательно устанавливать несколько программ и провести их бенчмарки, чтобы выбрать какой из них пользоваться, достаточно просто установить несколько и попробовать пользоваться, верно?
Что ж, это действительно немного снижает планку сложности выбора программ по скорости реакции. Но всё же и такой уровень вложения усилий для многих слишком велик, а значит и сокращает количество людей, кто будет это делать. Готовые сравнения производительности многим упростили бы жизнь.
Ну и кроме того не всё заметно на глаз. Программы могут работать быстро в обычных ситуациях, но например тормозить при работе с большими документами или на затроттленом перегревом процессоре. И столкнёшься с этим в неподходящий момент. Или например отличаться по потреблению заряда ноутбука или RAM. Без внимания к числам и не увидеть.
Наконец про выбор просмотрщика изображений. Для меня это насущная проблема: у меня за день скапливаются сотни картинок, которые я хотел бы скопом просмотреть, обращая внимание на некоторые из них, а Gwenview тормозит. И перебирать кучу софта в поисках быстрого некогда.
acidemic
IrfanView для просмотра картинок отлично подходит. Пользуюсь им с начала века.
samponet
Faststone, имхо, поудобнее, пошустрее и поменьше.
steanlab
XNView дружественнее имхо
paunch73
Жаль что под linux его нету, очень мне его там не хватает :(
khajiit
Каджиту подошел Nomacs в качестве замены. Но по богатству функционала, конечно, он серьезно недотягивает.
MAXH0
А вот тут прилетает еще один масдай - маркетинг-ориентированное блогерство. Отзывы блогеров как бы задуманы - человек сравнил две программы и пишет впечатление, облегчая другим выбор. Но нет! Все отзывы задавлены копирайтерами, которые по шаблону пишут отзывы на программы за денюжку малую. Соответственно шанс, что отзыв будет на что-то свободное или, хотя бы, бесплатное - минимален.
belozer0
Ещё ж и фактор операционки. Когда две лучшие программы написаны под разные системы — всё, вилы.
maaGames
Про VS это у вас какой-то глюк был. У меня как-то контекстные меню открывались по 15-20 секунд в том же хелоуворлде. Сброс всех настроек пробелму решил.
isadora-6th
Это был фреш инсталл, просто после "тормозного электрона", видеть инпутлаг уровня нажал на три буквы, напечаталась первая это уже перебор.
JordanCpp
Что же там за говнокод, который не юзает аппаратное ускорение, а если и юзает, то отрисовка вершин так много времни занимает? Не на питоне же написан. Современные видеокарты могут выводить десятки миллионов вершин за кадр, а тут две точки тормозят. Так и хочется написать ответ.
Что там с современным программным обеспечение?
Всё в говне сэр!
TheTryProgrammerName
Это же старое ПО, оно небось как 3Ds Max легаси с 90-х тянет, потому что переписывать долго, дорого и выхлоп в плане продаж с этого нулевой.
JordanCpp
Согласен и вот подтверждение.
d2d8
На вашем скрине в новости от 2012 года квартальная выручка составила 592млн, а в 2022 - 346млн. За 10 лет стало хуже исходя из неполных заголовков.
grumbler66rus
"Не на питоне же написан." - Верно, не на Python. Он на C#.
doctorw
В чём же тогда проблема?
apxi
Наверное в С#
victoriously
А всё просто - аппаратное ускорение там выключено по умолчанию. И какая бы видеокарта у вас не была, пока вы не активируете галочку в настройках, у вас всё будет рендерится на процессоре.
releyshic
" аппаратное ускорение там выключено по умолчанию " для чего так сделано?
Samedi_Da_Kapa
Предположу что это легаси с тех времен, когда эта фича была только добавлена и не все компы умели в аппаратное ускорение. Но я могу ошибаться.
iig
Но аппаратное ускорение это же, блин, критически важная штука, особенно в программе, которая как то связана с графикой. Если есть возможность, оно должно быть включено по дефолту.
saboteur_kiev
Почему вообще отображение обычного МЕНЮ требует аппаратного ускорения*?
iig
Потому что там выше какой-то автокад обсуждается, который тормозит при рисовании линий.
Jian
thims
О, 2022 год таки настал, перестали Гейтса всюду пихать )
saege5b
В Автогаде - файл как виртуальная файловая система, и при установке точки, оно заново всю базу данных проходит, иногда и не по разу.
Фикс этого чЮда я читал раз пять.
me21
А у меня на прошлом компьютере Nvidia geforce experience весь жёсткий диск сканировала в поиске установленных игр. Это в дополнение к службе поиска Windows. Хорошо, в настройках это отключается.
mayorovp
Да ладно ещё сканирование, эта сволочь играм настройки графики меняет. Точнее, в моём случае, зачем-то скручивает до минимальных (хорошего же, блин, мнения Nvidia о своих видеокартах!).
firs058
А зачем geforce experience вообще ставить? Для записи видео? Для OBS оно не нужно.
0xd34df00d
У меня obs не завелся, а этот вот жефорс експириенс просто работает (до тех пор, пока не ломается, ну да ладно).
mayorovp
Оно само ставится вместе с дровами, если не уследить.
Gaikotsu
Притом сканирует очень тупым образом - добавляя после первого сканирования в список "проверять эти папки потом периодически" все папки в названиях которых находит ключевые слова типа "game", "steam", "origin" и т.п.
PKav
Тут хоть речь о стороннем софте. А ведь совсем недавно в Windows была (или ещё есть?) служба Prefetch/Superfetch, которая загружала часто используемые программы в свободную память. В результате жесткий диск использовался постоянно, время загрузки системы и всех программ увеличивалось в несколько раз. И всё грузилось тем дольше, чем дольше была установлена система. Когда я кому-то отключал Superfetch они не узнавали свой компьютер, настолько разительно возрастала производительность.
JordanCpp
Это не та штука которая кеширует данные в ОЗУ? Когда повторно запускаешь программу обращения к диску отсутствует. Помню, что такой функционал был в Windows 7. Не могу вспомнить, чтобы я когда либо наблюдал Prefetch/Superfetch в диспетчере задач.
PKav
Хуже. Она ведет статистику использования программ и заранее загружает их в память сразу после запуска системы. Хотели как лучше, а получилось как всегда. И это служба, она работает под именем svchost.exe
P00WERFULL
стоит системный NVMe SSD. Superfetch в Виндовс 11 успевает забить кэшем все мои 32 гига озу пока я проводу пальцем по датчику отпечатков после загрузки системы. файла подкачки нет, быстрый запуск отключен.
vvviperrr
Ты чёт делаешь не так. Мне вон в соседней теме говорят, что мой древний 4790к ещё вполне себе для кодинга.
Kneqj
Игравая мусорка 5 от слоне тоже вечно багами страдает:
https://3dnews.ru/1025941/
Так что ничего удивительного.