«Проводник тратит 700 мс на то, чтобы открыть контекстное меню панели задач. 75% этого времени он выполняет 114 801 операцию считывания из одного файла, средний объём считываемых данных 68 байт.
Мне стоит написать пост об этом, или достаточно саркастичного твита?»
За компьютером я работаю быстро, и поэтому меня раздражает, когда приходится ждать завершения операции, которая должна выполняться мгновенно. Постоянной помехой на моём сверхмощном домашнем ноутбуке стало медленное закрывание окон на панели задач. Я нажимаю правой клавишей на значок, жду, пока откроется меню, а затем выбираю «Закрыть окно». Самым медленным в этом процессе должны быть перемещения мыши, но выясняется, что наиболее долгим компонентом оказывается задержка перед появлением меню.
Это напрягало меня уже давно, но я проявлял нехарактерный мне самоконтроль и удерживался от раздражения. Так было до сегодняшнего дня, когда я наконец сорвался и схватился за трассировщик ETW.
Этот пост написан как проверка скоростного блогинга. От момента нахождения проблемы и саркастичного твита о ней до публикации поста прошло примерно 90 минут.
Трассировщик ETW фиксировал, как я нажимаю правой клавишей мыши на панели задач и закрываю два окна «Проводника». Я использовал функцию UIforETW Tracing to file с опциями по умолчанию, получив в результате лог диагностики на 20,9 МБ.
Иногда самое трудное в анализе трассировки заключается в поиске места возникновения проблемы, но в данном случае эта часть анализа оказалась тривиальной. Было три недвусмысленных сигнала, указывавших на нужное место, и болезненно очевидный виновник преступления.
Первым сигналом были события ввода. UIforETW содержит интегрированный логгер ввода (достаточно анонимизированный, чтобы я случайно не украл пароли или личную информацию), поэтому мне достаточно было подробно изучить события MouseUp и Button Type со значением 2, соответствующим правой клавише мыши. При этом на временной шкале WPA появляются отметки моментов, когда происходят эти события — см. вертикальные линии на скриншоте:
Это дало мне понять, что когда я отпускаю правую клавишу мыши, то спустя 600 мс происходит смена фокуса окна, что, по моей догадке, соответствует моменту отображения меню. Кроме того, в RuntimeBroker.exe присутствует чёткий блок активности ЦП между событиями отпускания клавиши мыши и смены фокуса окна.
Не доказано, что смена фокуса окна и активность ЦП связаны, но сделав измерения при помощи приложения записи экрана, я увидел, что на отображение меню тратится примерно 660 мс, поэтому я склонен этому доверять.
Следующим шагом будет изучение того, чем занят RuntimeBroker.exe. Хотя CPU Usage (Precise) отлично помогает увидеть, сколько времени ЦП использует процесс, и почему он простаивает, подходящим инструментом для выяснения того, на что тратится время ЦП, является таблица CPU Usage (Sampled). Я внимательно её изучил и быстро обнаружил, что 264 сэмпла приходится на KernelBase.dll!ReadFile:
Поискав ещё немного, я нашёл другие стеки вызовов, которые тоже затрагивали эту функцию, поэтому я нажал правой клавишей мыши и выбрал View Callers-> By Function. Включившийся при этом режим (с инвертированными стеками) показал, что из 899 сэмплов этого процесса 628 сэмплов, или 70%, из разных стеков вызовов проходили через эту функцию:
271 сэмпла в этом потоке не проходили через функцию, а оставшиеся сэмплы (не показаны) находились в других потоках.
Заметьте, что 899 сэмплов в потоке 10 252 обозначают два щелчка мыши, то есть примерно 450 сэмплов или 450 мс (при стандартной частоте сэмплирования 1 кГц) на один щелчок мыши.
Иногда файловый ввод-вывод — это время ЦП
CPU Usage (Sampled) показывает время ЦП, поэтому дисковый ввод-вывод здесь обычно не отображается, ведь в эти моменты поток засыпает и ждёт диск. То, что операции ввода-вывода отображаются как время ЦП, означает, что все считывания пришлись на кэш системы и время ЦП было лишними ресурсами ядра (см. ntoskrnl.exe в первом сэмплированном стеке вызовов), потраченными на получение данных из кэша.
Теперь, когда под подозрение попал файловый ввод-вывод, нам необходимо перейти в Graph Explorer-> Storage-> File I/O. Немного настроив внешний вид столбцов, мы получили следующий впечатляющий результат:
Он сообщает нам, что в потоке 10 252 за два щелчка мыши RuntimeBroker.exe создал 229 604 вызова ReadFile, считав в сумме 15 686 586 байт. То есть в среднем каждый раз считывалось по 68 байт.
Задумайтесь об этом на секунду.
Не забывайте, что это вызовы к операционной системе — вызовы ядра. Это значит, что между RuntimeBroker.exe и этим файлом отсутствует кэширование. На самом деле сам файл имеет длину всего 4 027 904 байт, то есть каждый раз, когда я нажимаю на значок проводника в панели задач, файл считывается 1,9 раза самым медленным из возможных способов.
Подстрекаемый своими читателями, я решил удалить этот файл и теперь меню списка переходов проводника появляются почти мгновенно. Я не рекомендую этого делать, но удаление файла может помочь и вам (ценой потери истории проводника):
%appdata%\Microsoft\Windows\Recent\AutomaticDestinations\f01b4d95cf55d32a.automaticDestinations-ms
Выигрыш от удаления файла показан на этом скриншоте WPA. Тонкие вертикальные линии — это нажатия правой клавиши мыши, а прямоугольники в нижней строке обозначают момент отображения меню. Я удалил файл после первых двух кликов и при последних двух кликах задержка значительно снизилась:
Или же «можно воспользоваться официальным прибамбасом из „Параметров“, чтобы очистить (нажать дважды) или отключить (нажать один раз) списки переходов в меню „Пуск“/панели задач. Чтобы ещё больше повысить скорость, отключите также анимации». Спасибо, Рафаэль!
Похоже, что эту проблему можно решить. Снизив задержку отображения меню панели задач проводника, было бы здорово рассмотреть способы устранения других задержек, чтобы все меню панели задач появлялись мгновенно, а не спустя сотни миллисекунд.
Подведём итог
- Не вызывайте ReadFile, чтобы прочитать 68 байт. Или, по крайней мере, не делайте это сотню тысяч раз. Меня бесит, когда базы данных выполняют считывание по 4 кибибайта, но этот случай просто удивителен.
- Надеюсь, кто-нибудь устранит эту проблему, но пока у меня есть обходное решение — удаление проблемного файла.
- Надеюсь, кто-нибудь возьмётся за исследование и выяснит, почему вообще тормозят контекстные меню. Эй, я ведь даже поделился трассировкой ETW и всем остальным!
- Отчёт по официальным каналам передан в https://aka.ms/AA60dfg
- Если вы хотите научиться проводить подобный анализ, тогда скачайте мой инструмент UIforETW и прочитайте туториалы, ссылки на которые выложены здесь
- Не забывайте, что можно открыть контекстное меню гораздо быстрее (это проще, чем стандартное меню списка переходов), нажав shift+правой клавишей мыши на значки. Я буду пользоваться этим трюком, когда нужно будет закрывать много окон.
- Обсуждение на Hacker news находится здесь
- Обсуждение на Reddit находится здесь
- Темы в Twitter находятся здесь и здесь
Комментарии (456)
fingoldo
11.09.2019 00:20-1Хотелось бы узнать национальность разработчика MS, написавшего подобный говнокод.
Ещё сильнее хотелось бы подвесить кое-за что разработчиков, тетсировщиков и менеджеров, ответственных за разработку оснастки просмотра логов. Почему она ВСЕГДА тормозит, даже на мощнейших машинах? Примеров много можно привести, кстати. Гнилая система контроля качества, такая же система обратной связи. Баги, несуразности, тормоза в продуктах MS не чинятся ДЕСЯТИЛЕТИЯМИ, проблемы есть у многих, что отражено на официальных форумах компании — но MS класть хотела. И ведь, что характерно, процветают! Ну, а зачем тогда напрягаться.Barbaresk
11.09.2019 01:29Проблема по проявлению похожа на типичную ошибку новичка в вебе с N+1 запросом. Нужно выбрать 100 продуктов из б/д — вываливаем 100 запросов на получение цены, 100 запросов на получение кол-ва в корзине покупателя, 100 запросов на получение информации о товаре и т.д. Причиной этому обычно служат неудачные абстракции, когда возвращает некий объект класса, который на каждый свой метод дёргает соединение с бд. Не удивлюсь если здесь нечто подобное, только дёргается не бд, а файл с логами.
RH215
11.09.2019 14:00Причиной этому обычно служат неудачные абстракции, когда возвращает некий объект класса, который на каждый свой метод дёргает соединение с бд.
Скорее непонимание какие действия происходят за этими абстракциями.Barbaresk
12.09.2019 18:17+3Если раскрутить всю цепочку, то получаем примерно следующее:
1) Непонимание того, что происходит за абстракциями;
2) Кривые абстракции;
3) Отсутсвие кеширования;
Что в свою очередь возможно при:
4) Отсутствие код-ревью;
5) Отсутствие опытного архитектора;
6) Отсутствие профилирования приложения;
7) Плохо проработанный этап тестирования;
Что в свою очередь растёт из:
8) Плохой менеджмент;
9) Недостаток финансирования.
Ну а это всё уже похоже на типичные проблемы крупных корпораций, которые в каком-то смысле «впадают в детство» из-за необходимости оптимизации расходов времени и денег. И вот тогда появляются такие «детские ошибки», характерные для маленьких проектов.
Wesha
12.09.2019 18:39+1Скорее немонимание того, почему не надо нанимать самого дешёвого разработчика.
AllexIn
11.09.2019 08:07+4Говнокод есть везде.
Осмелюсь заявить, что нет программиста, который хотя бы раз в жизни не коммитил говнокод, которйы потом ушел в продакшн.justboris
11.09.2019 11:13Да уж, есть программисты, которым еще не приходилось коммитить говнокод в продакшен, и тем, кому уже пришлось.
Kanut
11.09.2019 11:17+2Да по моему покажи любому(ок, скажем почти любому) программисту его собственный код пяти, ну или максимум десятилетней давности и первая реакция будет "это кто наговнокодил? " или что-то в этом роде :)
mayorovp
11.09.2019 12:33Ну почему сразу же "кто"? Как будто я не помню автора...
Kanut
11.09.2019 12:38Ок, скажем у меня в такой ситуации обычно первая реакция "кто это наговнокодил?" и уже вторая "зачем я это наговнокодил?" :)
oleg_go
11.09.2019 20:06Программист, который помнит свой код через 10 лет, вызывает подозрение…
Можно посчитать, пусть 100 строк кода в день, в месяце в среднем 22 рабочих дня за год будет 26 тыс 400 строк кода. За 10 лет 264 тыс. строк — и как такое можно запомнить.
Хотя может человек уникум и помнит каждый день своего существования начиная с возраста 1 мес…justboris
12.09.2019 03:55Я обычно узнаю о том, что это мой код, через git blame. В системе контроля версий все ходы записаны
vics001
11.09.2019 12:55Вполне возможно, что код нормальный, но не оптимизирован. Ничего страшного нет, если, например, алгоритм выполняет сортировку в файле, а не в памяти, потому что раньше памяти сильно не хватало.
От этого код не становится плохим, просто он был применен в абсолютно дурацкой ситуации.x67
11.09.2019 14:51Легаси код, пронесенный сквозь десятилетия еще со времен вин для мс дос прямо в вин10, которая обновляется раз в 2 дня) звучит очень романтично. Это как вскрыть капсулу времени эпохи Гагарина) Только это остается говнокодом. Именно рациональное и обдуманное использование последовательностей символов превращает их в хороший код. Вы же не скажете, что айфон 3 — хорошая альтернатива топовым смартфонам. Так было когда-то, но сейчас это просто устаревший кирпичик)
kluwert
12.09.2019 10:39Это — вряд ли. Как раз раньше в «тёплые ламповые времена», программеры прекрасно в большинстве своём владели основными алгоритмами ускорения вычислений. Даже школьники (вспоминаю своё детство)! Сейчас поразвелось восторженных мальчиков-программистов-мажоров, к-рые считают, что если они написали несколько тысяч строк говно-кода на каком-нибудь Питоне, то они уже супер-пупер-программеры. На вопрос о «методе пузырька» в большинстве случаев слышишь: «чаво?». А на вопрос об оптимальности кода, получаешь совершенно идиотский ответ типа «а для чего тогда оптимизирующие компиляторы существуют, ты мне ещё предложи на асме писать». В рез-те критерий кач-ва работы программера является исключительно кол-во натоптанных за день на клавиатуре строк как бы работающего кода, а мы, в рез-те, только и успеваем засылать горы денег производителям железа :(
Arris
12.09.2019 16:05+1Хуже. Количеством скопипащенных строк со стековерфлоу. И хорошо если стековерфлоу, а то разные бывают источники говнокода…
GoldJee
11.09.2019 08:23+4Неразумность не имеет ничего общего с национальностью.
rexen
11.09.2019 13:29+1Напрямую — нет. Опосредованно — через культуру.
Нравится вам это или нет.KvanTTT
11.09.2019 13:46Тогда в исходном комменте автору надо было хотеть узнать культуру, а не национальность.
DarkGenius
11.09.2019 15:30-1Пруфы будут?
rexen
11.09.2019 20:04+6Видимо, в качестве пруфов нужна какая-то статистика. Я такой не знаю. Боюсь, что и подобные исследования — независимо от результата — будут затруднительны по причине нетолерантности.
Но вообще тут всё очевидно. Если в некоей культуре не принято научное мировоззрение, а принято мракобесие — получите результат в виде дремучего народа. Ну и отсюда уже один шаг до национальности. Просто потому что определённым национальностям свойственна определённая культура.
Это НЕ причинно-следственная связь. Это грустная констатация нашей жизни — рождаясь в конкретной стране, в окружении определённой культуры, вы и будете ей воспитаны — независимо от вашей ДНК. Родитесь в каком-нибудь Сомали — не надейтесь на Нобелевку.
Может когда-нибудь — в светлом будущем — рождающиеся люди будут реально равны, независимо от географии, пола, расы, родителей. А пока — увы.ardraeiss
13.09.2019 15:53Тогда первое же следствие из «очевидного» — это тот факт, что оная «культура» неравномерна. Сильно неравномерна. В глубинке где угодно она будет иной, нежели в культурно-научной столице этого же где угодно. При том, что самоучный самородок(как и непонимающий тупка) и там, и там вполне может появиться.
Fenzales
11.09.2019 15:57По своему опыту нанимания индусов на upwork, причем далеко не с минимальными ценниками, всё-таки у них есть неприятные особенности, связанные с работой. Не столько неразумность, сколько постоянное желание срезать несрезаемые углы, причем даже на почасовой оплате.
sumanai
11.09.2019 12:50+4Баги, несуразности, тормоза в продуктах MS не чинятся ДЕСЯТИЛЕТИЯМИ
Значки в трее убитых программ до сих пор исчезают только после наведения на них. А ведь этот баг тянется ещё с Windows XP!Whuthering
11.09.2019 13:01+1Раньше, с Windows 2000, а возможно даже с NT или с классической ветки 95/98.
NetBUG
11.09.2019 15:18+1Вы что, хотите, чтобы MS перестал заниматься постоянными улучшениями UX в своих OS и выпускать обновления каждые три месяца?)
perfect_genius
11.09.2019 20:53На семёрке всплывающая подсказка остаётся на экране, пока снова не наведёшь на его значок.
quwy
11.09.2019 22:23-1Значки в трее убитых программ до сих пор исчезают только после наведения на них. А ведь этот баг тянется ещё с Windows XP!
Такое поведение тянется с самой первой версии Windows с панелью задач и треем. Но это не ошибка, а банальная оптимизация, которая сделана намерено. Как раз для того, чтобы поменьше было такого, как то, что описано в данной статье. Слишком накладно на каждый вызов TerminateProcess() и других причастных функций шерстить все иконки в треях всех сессий.
Вообще, как показывает опыт чтения блогов разработчиков, 99% случаев того «странного» поведения Windows, которое диванные оналитеги считают ошибками, на самом деле являются осознанными решениями, которые продиктованы объективными обстоятельствами.deseven
11.09.2019 23:43Неубедительно. Держать в памяти короткий массив из соответствий «pid — хэндл иконки» и пробегаться по нему при завершении процесса было бы очень быстро, вряд ли даже измеримо в мс на современных машинах. А вы это сравниваете с чтением файла 100 000 раз.
quwy
12.09.2019 04:19Вы хоть понимаете, что explorer.exe — обычное приложение юзерспейса, а процессы прибиваются в ядре? Тут нужен фундаментальный механизм уведомления пользовательских приложений о рождении и смерти процессов, без которого ваш массив будет требовать непрерывного опроса. А о непрерывных опросах разработчики MS сто раз уже написали в духе «сами не делаем и никому делать не рекомендуем».
khim
12.09.2019 12:34Тут нужен фундаментальный механизм уведомления пользовательских приложений о рождении и смерти процессов, без которого ваш массив будет требовать непрерывного опроса
И за 20 лет такой механизм сделать не удосужились? Притом что ядро современных версий Windows — раз в 10 увеличилось?Arris
12.09.2019 16:10А зачем? Это фундаментальное улучшение не принесет прибыли, а пипл схавает и так.
khim
12.09.2019 16:17Но ведь перестал хавать. Если с Windows 3.0 на Windows 3.1 пересаживались добровольно, то всё, что после XP — приходится «всучивать» разными способами. На Windows 10 — даже при всех сверхусилиях, удалось пересадить половину пользователей только через 4 года после релиза!
P.S. На 95/XP тоже переходили долго, на самом деле, но там всё понятно: требовалось обновить железо, приходилось копить на апгрейд. Но вы видели сейчас хотя бы одного человека, который не пользуется Windows 10, но собирается и копит на неё деньги? Я — ни разу, ни одного. А вот людей, которые держатся за Windows 7 — полно (есть ещё и такие, кто Windows XP использует)Kanut
12.09.2019 16:29Но ведь перестал хавать
Я думаю если посмотреть на продажи и прибыли, то мы увидим что если что-то и изменилось, то скорее в другую сторону. Во всяком случае оборот у Microsoft'а растёт из года в год.
khim
12.09.2019 16:40Вот только этот оборот уже давным-давно не от продаж Windows. И даже офис оказался никому не нужным вне PC (Windows Phone и планшеты на Windows должны были покупать как раз из-за офиса… Но не покупали).
Продавать же людям, которые покупают Windows только и исключительно из-за отсутствия альтернативы можно вообще что угодно — зачем при этом регулярно портить то, что было раньше сделано?Kanut
12.09.2019 16:54То что оборот такой может и не из-за самой винды я спорить не буду. Но даже если винда сама по себе там не основной фактор, то всё равно её приходится покупать чтобы нормально работать.
А на тему "портить"… Я сам не особый фанат постоянных изменений, но часть из них всё-таки просто необходима и тут никуда не денешься. А часть продиктована рынком и "средним пользователем", который например хочет вещи вроде Lenovo Yoga с тачдисплеем и планшет-модом.
И таких "хотелок" куча и всем надо угодить. И конечно в теории можно выпускать разные версии операционок под разные запросы, но Microsoft решил пойти другим путём. И тут я честно признаюсь что моих знаний/умений однозначно не хватает чтобы оценить правы они были или нет.
П.С. А учитывая вот такие ситуации (прошу прощения что на немецком) и цены я уже и смирился с тем что получаю...
popov654
12.09.2019 21:29randomascii.wordpress.com/2018/08/16/24-core-cpu-and-i-cant-type-an-email-part-one
Сегодня вот прочитал, нашёл в этом треде по одной из ссылок.
Серьёзно, всей этой проблемы попросту не было бы — как не понадобилось бы и десятков человекочасов, затраченных на решение отдельных недоработок, приведших к её появлению — если бы в MS лет 5 назад не сделали такую вещь, как CFG (а ещё раньше не сделали бы ASLR, без которой всем и так прекрасно жилось).
Arris
12.09.2019 21:28Так ведь вопрос же еще в долях рынка.
Сколько таких, критичных, как вы среди частных лиц? А какую долю в рынке имеют корпоративные закупки?khim
13.09.2019 00:24А какую долю в рынке имеют корпоративные закупки?
Корпоративные закупки — как раз отличный показатель. Многие компании вот только вот-вот сейчас сползли с Windows 7. Тянули до последнего. Думаете это происходит из-за того, что им очень нужны пердосвистелки из Windows 10?
Воспрос риторический.Kanut
13.09.2019 10:19Многие компании вот только вот-вот сейчас сползли с Windows 7.
А вот тут мне бы интересно было посмотреть на цифры и сколько процентов составляют эти "многие". Все известные мне фирмы/конторы на win10 уже давно перешли и не то чтобы с каким-то огромными проблемами.
П.С. А учитывая что в Европе многие фирмы берут компы в лизинг и/или просто меняют их где-то раз в пять лет, то они с новыми компами автоматом получали и win10. Так что надо ещё и по странам отдельно смотреть где как дела обстоят.
khim
13.09.2019 12:49П.С. А учитывая что в Европе многие фирмы берут компы в лизинг и/или просто меняют их где-то раз в пять лет, то они с новыми компами автоматом получали и win10.
Если мы говорим про достаточно большие фирмы, то они ставят, обычно, свою сборку Windows Enterprise Edition. Которую, сюрприз-сюрприз, обновлять не любят — это затраты на переобучение и прочее.
А вот тут мне бы интересно было посмотреть на цифры и сколько процентов составляют эти «многие».
Тот факт, что Windows 10 только в этом году обогнала Windows 7 по популярности, по моему, говорит о многом.
Даже если считать, что компьютеры обновляются раз в пять лет, и пользователи используют то, что получают от продавца — это должно было бы случиться раньше. А если ещё вспомнить, как Windows 10 пихали бесплатно всем пользователям Windows 7… то вывод очевиден: все добавленные после Windows 7 пердосвистелки не приводят к росту популярности. Скорее ситуацию можно охарактизовать как «пользователи ненавидят Windows 10, но используют из-за отсуствия альтернативы».Kanut
13.09.2019 14:28Общую статистику по win10 я видел и не оспариваю. Интересно посмотреть как оно выглядит по сегментам и странам.
Ну и как бы у нашей фирмы переход на win10 каких-то особых проблем не вызвал. Во всяком случае не больше чем на предыдущие версии. У нас например скорее проблемы с тенденций Microsoft'а переносить всё в онлайн-сервисы и cloud.
red75prim
12.09.2019 22:10Есть такие механизмы. Для отслеживания старта процессов посложнее: свой драйвер использующий PsSetCreateProcessNotifyRoutine. Для отслеживания завершения: EnumProcesses, OpenProcess, WaitForMultipleObjects.
Почему эксплорер иконки не удаляет после смерти процесса — фиг знает. Скорее всего для обратной совместимости с какими-то древними приложениями, которые выводили иконку с оповещением и завершали процесс.
quwy
13.09.2019 18:23Для отслеживания завершения: EnumProcesses, OpenProcess, WaitForMultipleObjects.
Я ждал это решение. Долговато :)
А теперь расскажу такую историю. На заре проектирования оконного интерфейса, в MS встал вопрос о том, как лучше всего организовать разделение окна на клиентскую и неклиентскую области. Нужно было сделать так, чтобы ограничить случайное влияние программиста на служебные области окна, типа заголовка и бордера. Самым очевидным и архитектурно правильным решением было сделать «матрешку», когда вся клиентская область является дочерним окном внутри основного окна GUI. Через вызовы API разработчику всегда отдавать дескриптор именно дочернего окна, а служебные кнопки управления разместить на материнском окне уровнем выше. Но это решение было отклонено из-за того, что оно требовало двух дескрипторов на каждое пустяковое окно. Вместо этого наворотили костыль с уменьшенным в размере device context окна, который не затрагивает служебные области. Все из-за одного лишнего дескриптора.
А ваше решение предполагает держать открытыми неопределенное количество дескрипторов ради отслеживания того, что по-хорошему отслеживать вообще нет надобности.
В майкрософте долгое время работали довольно жесткие требования к оптимизации работы системы. Это и принцип «не жди в цикле, используй блокирующую ф-цию», и «не сохраняй в память мелочь, которую можно быстро пересчитать», и «вероятное на 1/1000000 событие произойдет через минуту», и много другого. Сегодня, похоже от этой практики отказались, к сожалению.khim
13.09.2019 18:57В майкрософте долгое время работали довольно жесткие требования к оптимизации работы системы. Это и принцип «не жди в цикле, используй блокирующую ф-цию», и «не сохраняй в память мелочь, которую можно быстро пересчитать», и «вероятное на 1/1000000 событие произойдет через минуту», и много другого. Сегодня, похоже от этой практики отказались, к сожалению.
Но ошибку, в результате, так и не исправили.
В результате имеем систему которая одновременно и жрёт ресурсы, как не в себя, и глючит. Отличное сочетание.quwy
13.09.2019 19:11Это не ошибка. Ошибка — это не соответствующее ТЗ поведение программы вследствие неправильно написанного кода. Тут все работает как и было задумано.
Что до современных версий, то здесь просто принцип «без крайней необходимости ничего старого не меняем», а новое пишем уже «тяп-ляп и в продакшен».khim
13.09.2019 19:23Ошибка — это не соответствующее ТЗ поведение программы вследствие неправильно написанного кода.
С точки зрения пользователя ошибка — это несоотствие поведения программы ожидаемому. Пользователи ТЗ не читают.
Конечно все пользователи разные, так что что для одного ошибка — для друого может быть фичей… но вот конкретно в случае с треем я не видел никого и никогда, кому бы существующее состояние нравилось.quwy
13.09.2019 19:30С точки зрения пользователя ошибка — это несоотствие поведения программы ожидаемому
Нуууууу, так мы можем договориться до того, что даже стандартный «калькулятор» насквозь глюкавый, потому что некий юзер ожидает от него поведение как у MathCAD.
я не видел никого и никогда, кому бы существующее состояние нравилось
Нравится/не_нравится — это не те критерии, по которым баг отличают от фичи. Я не знаю, есть ли какое-то официальное подробное руководство по Windows, но если есть, то в нем вполне может быть описано данное поведение, что автоматически закрывает данный вопрос.
drWhy
13.09.2019 19:40Пользователи ТЗ не читают.
И не пишут, т.е. не участвуют в формулировании. Даже корпоративные. Но продукт оплачивают именно пользователи. А на спецификации повлиять не могут. Своеобразная ситуация.quwy
13.09.2019 21:57И не пишут, т.е. не участвуют в формулировании. Даже корпоративные.
На самом деле корпоративщики имеют какой-то канал продавливания своих фич. Правда, иногда их хотелки немного расходятся со здравым смыслом (пример есть у меня).
popov654
12.09.2019 21:24Спорно. taskmgr.exe — тоже приложение юзерспейса. И ничего, опрашивает все процессы раз в секунду, обновляет столбцы, и даже позволяет прибивать процессы по команде. И что самое главное, CPU почти не грузит и лагов вообще не создаёт (и раньше не создавал во времена выхода Windows 2000/XP).
quwy
12.09.2019 21:56Ну, интерактивное приложение, работа которого заключается в непрерывном обновлении визуальной информации, сюда очевидно не относится. Медиаплеер, например, вообще в этом плане грузит аж бегом и это нормально.
Что касается нагрузки на процессор, то помню, как открытие таскменеджера на первопне/NT4 замедляло mp3-енкодинг сходу процентов на 20.
viklequick
12.09.2019 13:17+2С учетом того что и так все объекты как ядра, так и Win32, отслеживаются в таблицах процесса ядром системы, то еще один объект USER хранить и обрабатывать — вообще бесплатно.
Тут дело не в этом.
А именно, есть нотификации «окно закрыто» / «окно появилось», чтобы эксплорер свой таск бар отрисовал. Причем неважно — по какой причине окно изчезло. Оно ведь убирается когда прога падает? Вооот!
Вообще, микрософт очень долго требовала наличие невидимых окон в обязательном порядке. Для DDE, для сокетов (кто помнит первую версию WinSock — оценит).
NOTIFYICONDATA nid; nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hWnd; nid.uID = 100; nid.uVersion = NOTIFYICON_VERSION; nid.uCallbackMessage = WM_MYMESSAGE; nid.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcscpy_s(nid.szTip, L"Tray Icon"); nid.uFlags = NIF_MESSAGE NIF_ICON NIF_TIP; Shell_NotifyIcon(NIM_ADD, &nid);
И для трея оно тоже — есть. То есть чтобы я добавил что-то в трей — мне надо не забыть RegisterClass/CreateWindow. Ну, чтобы банально получать клики по иконке. Кто-то же должен получать WM_TASKBAR_NOTIFY…
А теперь внимание, черный ящик!!! Если эксплорер и так знает все окна в трее, если он и так получает сообщения об их закрытии, то почему он трей при этом не перерисовывает?
Великая тайна, ага.popov654
12.09.2019 21:36Я кажется понял. Потому что «окно» для трея не закрывается при аварийном падении основного процесса — его закрыть просто некому.
viklequick
12.09.2019 22:16Если окно закрыть некому — то мы получаем leakage of USER32 resources. Так что вряд ли, это еще в NT4 решили.
sumanai
12.09.2019 02:18То есть по наведению норм, а по завершению процесса нет?
DrPass
12.09.2019 02:48+1Explorer со своим треем, он же обычное приложение пользовательского режима. Если какая-то программа скоропостижно сдохла, забыв его попросить убрать иконку из трея, он об этом узнает, только если сам будет периодически опрашивать.
quwy
12.09.2019 04:30То есть по наведению норм
Именно так. Если бы вы читали документацию, то знали бы, что при наведении на иконку в трее, окну приложения идут сообщения об этом событии. А раз все равно нужно использовать дескриптор окна, то тут же и выявляется факт его скоропостижной смерти.
а по завершению процесса нет?
Завершение процесса — это событие ядра, которое других пользовательских процессов никоим образом не касается.
У процесса explorer.exe нет способа узнать, что superpuperapp.exe только что аварийно завершился, кроме опроса. А опрос во-первых слишком дорог сам по себе, а во-вторых противоречит политике кодирования MS (никаких циклов ожидания/опроса, только блокирующие функции).qw1
12.09.2019 07:21Как вариант — user32 для каждой иконки в трее регистрирует mutex и берёт его во владение, при завершении процесса процесс теряет владение mutex-ом, а Explorer ждёт изменение любого mutex-а через WaitForMultipleObjects.
quwy
12.09.2019 16:42Много можно придумать вариантов, но уж как есть. Обратная совместимость — это ключевое преимущество Windows, благодаря которому она и завоевала львиную долю рынка десктопов.
qw1
12.09.2019 17:42Предложенное решение не рушит обратную совместимость, т.к. mutex-ы создаются в пользовательском процессе не пользовательским кодом, а кодом USER32, при добавлении иконки в трее.
quwy
12.09.2019 21:49Так у user32 те же проблемы. Не факт что такое событие, как смерть процесса, заведено в него нужным образом из kernel32. Сами понимаете, что каждый новый мост между такими модулями — это большое событие, которого стараются избегать до последнего.
qw1
13.09.2019 15:54В user32 не надо заводить событие смерти процесса. Достаточно в внутри NotifyIcon создать mutex (который окажется в контексте пользовательского процесса) и передать его в Explorer.exe вместе с другими параметрами треевой иконки. В момент смерти процесса mutex автоматчески отпустит, эта логика уже в ядре и никаких новых мостов не надо.
red75prim
13.09.2019 16:42+1Зачем mutex, когда есть process? В NotifyIcon GetCurrrentProcessId(), в эксплорере OpenProcess(), и добавить его в WaitForMultipleObjects().
quwy
13.09.2019 18:27Здесь ответил.
qw1
13.09.2019 21:22В трее не больше 10 иконок у среднего юзера. Экономия 10 хендлов имела смысл на 386-х (и то, сомнительно), но сейчас-то никто не мешает сделать отслеживание умирающих приложений с сокрытием его иконки.
quwy
13.09.2019 21:43Блин, за время, которое мы потратили на обсасывание этой фигни, можно было бы написать прибулду, которая будет раз в секунду посылать виртуальное движение курсора каждой иконке, чтобы удалить мертвые.
quwy
13.09.2019 21:53Более того, такой софт уже существует.
When a program is forcefully terminated it is not able to cleanup any of its resources, as a result dead icons are left in the system tray until you hover your mouse over them. Explorer does not perform house keeping and remove any dead icons automatically. SysTray Refresh will keep the system tray area clean.
drWhy
12.09.2019 09:26+1А опрос во-первых слишком дорог сам по себе, а во-вторых противоречит политике кодирования MS (никаких циклов ожидания/опроса, только блокирующие функции).
В итоге имеем контекстное меню, вызванное на рабочем столе, которое вернётся после таймаута опроса порта выключенного сетевого принтера на предмет присутствия в нём бумаги. Весь Explorer при этом висит.
А вот прибить иконку в трее накладно. А там приложение мониторинга температур, бодро докладывающее, что всё ок, температура в норме, но это не точно.quwy
12.09.2019 16:50В итоге имеем контекстное меню, вызванное на рабочем столе, которое вернётся после таймаута опроса порта выключенного сетевого принтера на предмет присутствия в нём бумаги. Весь Explorer при этом висит.
Это очень прискорбно, но какое решение вы предлагаете для подобных ситуаций? Не обязательно с принтером, а, например, когда за отрисовку пункта меню отвечает стороннее приложение, которое тупит. Что делать?
А там приложение мониторинга температур, бодро докладывающее, что всё ок, температура в норме, но это не точно
А если это приложение не вылетело, а зависло? Температура будет точно так же «в норме», но повода убивать иконку у експлорера вообще никакого.
Не нужно перекладывать с больной головы на здоровую. Если приложение виснет или вылетает, системный шелл не нанимался ему сопли подтирать.
А такие вещи, как мониторинг температуры вообще должны работать сервисами, для которых есть штатный механизм перезапуска после сбоя.drWhy
12.09.2019 17:07+1… за отрисовку пункта меню отвечает стороннее приложение, которое тупит. Что делать?
Свой таймаут добавлять. 500 мс должно хватать всем. Разослали приглашения всем желающим, собрали ответы, подождали 500 мс, кто не успел — тот не успел.
Сюда же добавлю панель управления, там объектов то всего-ничего, но отрисовывается неспеша. На одном из компьютеров какой-то пункт выскакивает позже остальных и становится в начале, сдвигая все. В результате клик попадает по другому пункту. Не комильфо.
А если это приложение не вылетело, а зависло? Температура будет точно так же «в норме», но повода убивать иконку у експлорера вообще никакого.
Вот ни разу у меня hwinfo не вылетало.
А такие вещи, как мониторинг температуры вообще должны работать сервисами, для которых есть штатный механизм перезапуска после сбоя.
Подпишусь. Только производителям железа это не нужно, потому из коробки отсутствует. А брендовые утилиты мониторинга температуры и управления охлаждением это ужас.quwy
12.09.2019 17:47Свой таймаут добавлять. 500 мс должно хватать всем. Разослали приглашения всем желающим, собрали ответы, подождали 500 мс, кто не успел — тот не успел.
То есть, другими словами, если сторонний код написан на каком-нибудь .NET и тупо не успел стартануть за это время, пункт меню мы не увидим? А во второй раз, когда виртуальная машина уже «разогрета» — то уже увидим? Зашибись. И, кстати, почему 500 мс? Почему не 100 или не 1500?
Вот ни разу у меня hwinfo не вылетало.
Тогда зачем вы этот пример выше привели?drWhy
12.09.2019 20:08За 1500 мс я откушу себе мышку. Или перестану пользоваться контекстным меню. На маках как-то обходились одной кнопкой мышки.
Речь, если правильно понимаю, исходно шла о том, что приложение, зарегистрировавшее иконку в трее, прибили, а иконка осталась. Если падает само, значит, можно обойтись и без него.quwy
12.09.2019 21:40Тут уже разговор пошел шире.
Что делать в ситуациях, когда поведение шелла зависит от сторонних приложений, ведущих себя неподобающим образом. И, как видите, однозначного ответа тут нет, все решения компромиссны. Или ждем процесс-тормоз, или игнорируем его, хотя в принципе, он выйдет на готовность через 10 мс после истечения таймаута и готов без проблем выполнять свою функцию.
Если воспринимать трей как каталог, в котором приложения создают некие файлы-маячки и сами должны их удалять, то такое поведение оказывается вполне логичным.drWhy
13.09.2019 10:26Предложил бы отталкиваться от ценности времени пользователя. Система и прикладное ПО существуют именно для него и, в идеале, не должны отнимать его время.
В данном случае в контекстное меню можно добавить пункт "...", куда ссыпать все неотозвавшиеся в разумные сроки тормозные процессы. Если при первом проходе пользователь недосчитался нужного ему ответа, он может осознанно выбрать данный пункт, подождать и получить недостающие статусы. Как спойлер на Хабре — кому-то нужно быстро пролистать, кому-то заглянуть под капот. Но замедлять каждую операцию ради вероятнее всего несущественной информации представляется некорректным.quwy
13.09.2019 17:50Предложенный вами вариант нарушает детерменированность поведения системы. В зависимости от не очевидных факторов некоторые пункты будут оказываться то в основном меню, то в подменю «тормозов». После такого набежит еще больше диванных ыкспертов с криками «ааааа! глюкавая венда!!!11111».
drWhy
13.09.2019 19:49Действительно, непорядок.
Тогда предлагаю вместо загрузки системы вывести сообщение «Подождите, идёт улучшение», так система приобретёт окончательную детерминированность.
qw1
13.09.2019 16:19Если воспринимать трей как каталог, в котором приложения создают некие файлы-маячки и сами должны их удалять, то такое поведение оказывается вполне логичным.
Такое мнение имеет право на жизнь. Но в этом случае, значок мёртвого процесса не должен пропадать при наведении на него мыши. Ведь именно это вызывает недоумение пользователя.quwy
13.09.2019 18:01Все правильно! В ранних альфах win95 при попытке интерактивного взаимодействия с таким значком выдавался месседжбокс, что приложение, создавшее значек, было неожиданно закрыто. И знаете что? Это раздражало пользователей. Юзера, блин, не читают месседжбоксы, они поскорее нажимают OK чтобы вообще не видеть их. И получалось, что вместо ожидаемого окна иконка начинала выводить что-то «непонятное». Как будто программа все еще запущена, но работает как-то не так как нужно.
Вы не представляете, сколько полезных и уже реализованных функций было в итоге пущено в корзину из-за неадекватности потенциальных юзеров/разработчиков/производителей. Сколько шлака и нелогичностей добавлено в систему, чтобы говнокод, которому место на помойке, продолжал работать. Сколько ненужной работы сделано, чтобы тупому юзеру система казалась стильнее, моднее и молодежнее.khim
13.09.2019 18:18И получалось, что вместо ожидаемого окна иконка начинала выводить что-то «непонятное». Как будто программа все еще запущена, но работает как-то не так как нужно.
И уже в этот момент добжно было бы стать понятно, что иконки от «умерших» приложений должны были бы из трея пропадать.
Ну хорошо, к релизу Windows 95 проблему исправить не успели. Бывает. Почему за прошедшие 25 лет не исправили???
Сколько ненужной работы сделано, чтобы тупому юзеру система казалась стильнее, моднее и молодежнее.
Вот только «тупой юзер» этого не ценит и предпочитает старые версии… странно, правда?quwy
13.09.2019 18:37иконки от «умерших» приложений должны были бы из трея пропадать
Они и пропадают. Но триггером для этого является какое-нибудь действие пользователя. Исключительно с позиции оптимизации.
Почему за прошедшие 25 лет не исправили???
Давайте добавим сюда еще и то, что %temp% загаживается. Явления одной природы ведь.
А, кстати, знаете, почему винда не чистит темпы при перезагрузке, как линукс?Wesha
13.09.2019 19:22Они и пропадают. Но триггером для этого является какое-нибудь действие пользователя.
Угу. То есть работал я и работал, иконка тихо пропала — я бы и не заметил. Но как только я потянуля мышкой, чтобы нажать именно на ту иконку (которая отлично видна) — а она прямо из-под курсора бац, и пропала! Не раздражает совершенно! (сарказм)
quwy
13.09.2019 19:34С другой стороны, так вам будет дан пассивный сигнал, что с данным приложением есть проблемы. Если бы иконка тихо исчезла, вы бы не заметили этого, и думали, что просто забыли запустить или уже закрыли программу. А так именно в момент попытки использования получите и распишитесь.
Wesha
13.09.2019 21:02+1Напоминает
тот анекдот— Рабинович, как Вы могли — говорят, Вам вчера в автобусе дали оплеуху, а вы даже не отреагировали!
— Я?!? Не отреагировал?! А кто же тогда упал?
quwy
13.09.2019 18:46Вот только «тупой юзер» этого не ценит и предпочитает старые версии… странно, правда?
То, о чем я написал, отнюдь не новое веяние.
Как пример, история времен Windows 95. При отображении каталога в проводнике, имена файлов, содержащие только буквы верхнего регистра, целиком приводятся к нижнему (EXPLORER.EXE -> explorer.exe). Мультирегистровые и полностью нижнерегистровые имена не изменяюся. Нахрена это сделано? В момент перехода на Win95 у каждого пользователя имелся солидный багаж файлов, созданных в DOS на FAT-диске без vFAT (т.е. без информации о регистре букв имени). Эти файлы в самой DOS при выполнении команды DIR выводились в верхнем регистре. И вот, чтобы список файлов в проводнике выглядел не так архаично, как листинг каталога на экране DOS, эти файлы были заловеркейсены. И юзера, кстати, оценили, ибо список из сотни верхнерегистровых файлов действительно выглядит как-то тяжелее для психики.khim
13.09.2019 19:02Это всё прекрасно, но не объясняет того факта, что на то, чтобы изгадить интерфейс и вызвать ненависть пользовалей — ресурсы находятся, а на то, чтобы исправить ошибки — нет.
quwy
13.09.2019 19:16Это проблемы менеджмента любой современной конторы. Свистелки и перделки вперед всего. В гугле, например, это вообще перешло в эпидемию: «двигаем кнопки просто чтобы что-то поменять, отрапортовать о новой версии, получить премию». Совок напоминает.
khim
13.09.2019 19:25Совок напоминает.
Совок плохо кончил. Во многом именно поэтому. Ждём краха ИТ-индустрии? Или?
qw1
13.09.2019 20:55Все правильно! В ранних альфах win95 при попытке интерактивного взаимодействия с таким значком выдавался месседжбокс, что приложение, создавшее значек, было неожиданно закрыто
А нахрена? Кто-то просил выводить это сообщение?
Если воспринимать трей как каталог, в котором приложения создают некие файлы-маячки и сами должны их удалять,
То и нефиг что-то делать без ведома программы, пусть даже уже покойной.quwy
13.09.2019 22:03То и нефиг что-то делать без ведома программы, пусть даже уже покойной.
Так вы же сами топите за немедленное удаление!khim
14.09.2019 00:08+1Понимаете, все пользователи «топят» за вменяемое поведение: либо иконка есть и работает, либо её нет. Иконка, которая вроде как есть, но которую использовать нельзя — это бардак.
qw1
14.09.2019 09:14Так вы же сами топите за немедленное удаление!
Я обсуждаю предложенную модель «воспринимать трей как каталог, в котором приложения создают некие файлы-маячки». Если иконка может жить без приложения, то пусть так и будет. Если иконка должна жить только вместе с приложением — тоже принимается. Но текущее поведение — это ни та модель, ни другая.
Naves
12.09.2019 13:13Как это нет способа узнать?
Большой taskbar успешно может, а маленький iconbar не может?drWhy
12.09.2019 13:20Большой таскбар отображает все окна определённого типа.
А чтобы попасть в трей, приложение должно зарегистрировать значок отдельным вызовом. Соответственно, потом разрегистрировать другим вызовом.
Что, впрочем, не мешает некоторым приложениям отображать беглую анимацию в трее.
Просто нужно либо обязать приложение перед закрытием разрегистрировать значок, либо самому трею периодически проверять все зарегистрированные значки на актуальность, что действительно на фоне темы статьи не так уже и напряжно.
viklequick
12.09.2019 13:33+1Открываем SetWindowsHookEx, ставим WH_SHELL hook, и ловим HSHELL_WINDOWDESTROYED event.
Появилось с W2k.
Используется explorer, а затем и dwm чтобы перерисовывать таск бар.
Во дела, прошло 20 лет и уже «нет способа» :-)quwy
12.09.2019 17:44Даже если не обращать внимание на то, что хуки сами по себе тяжеленная штука, что хук для другой архитектуры требует отдельного процесса, что глобальный хук может требовать эскалации привилегий, то все равно выясняется, что некоторые приложения (антивирусы и фаерволлы в первую очередь) активно противятся инжекции сторонней DLL, и что, внезапно, при принудительном прихлопывании процесса, HSHELL_WINDOWDESTROYED просто не приходит.
viklequick
12.09.2019 20:39Это для WH_CBT или WH_CALLWNDPROC требуется внедрение DLL в процессы, и это действительно тяжелая штука.
А я речь веду о вот таком. Специально нашел вам пример на дотнете.
public class SystemProcessHookForm : Form { ... public SystemProcessHookForm() { // Hook on to the shell msgNotify = Interop.RegisterWindowMessage("SHELLHOOK"); Interop.RegisterShellHookWindow(this.Handle); } protected override void WndProc(ref Message m) { if (m.Msg == msgNotify) { // Receive shell messages switch ((Interop.ShellEvents)m.WParam.ToInt32()) { case Interop.ShellEvents.HSHELL_WINDOWCREATED: case Interop.ShellEvents.HSHELL_WINDOWDESTROYED: case Interop.ShellEvents.HSHELL_WINDOWACTIVATED: string wName = GetWindowName(m.LParam); var action = (Interop.ShellEvents)m.WParam.ToInt32(); OnWindowEvent(string.Format("{0} - {1}: {2}", action, m.LParam, wName)); break; } } base.WndProc(ref m); } ... }
Как видите, реализация очень проста, не требует никаких инъекций кода и отдельных DLL (хотя и это тоже достаточно простая штука, закинул свою DLL-ку в реестр и все), и вполне себе работает.
И да, ядро много чего делает для Win32 контекста, в том числе — освобождая ресурсы user/gdi. И в том числе — рассылает и нотификации для top-level windows.
Я даже лет 15 назад пытался делать нечто похожее, чтобы без сервиса и агента в трее, но выглядело это трюкачеством :-)quwy
13.09.2019 19:23Отвечу одной цитатой из MSDN:
This function is not intended for general use. It may be altered or unavailable in subsequent versions of Windows.
Ну и в догонку:
HSHELL_WINDOWDESTROYED :: A handle to the top-level window being destroyed.
Сомневаюсь, что это вообще применимо к невидимым служебным окнам.viklequick
13.09.2019 20:46handle to the top-level window
Ваша контр-аргументация должна бы выглядеть как-то так: вот пример (код) того что в трей можно поместить не только top level window, это работает, и это ломает всю красоту схемы. Нашелся кейс для которого… и т. д.
А раз можно туда подсунуть окно со стилем WS_CHILD — то и смысл отслеживать только top levels пропадает. Так?
А то мы скоро дойдем до цитирования Windows 95 internals в попытках выяснить — какой же из нескольких способов отслеживания закрытия top-level window будет настолько симпатичен, что вы все-таки согласитесь — все-таки могла микрософт им воспользоваться :-)
Или наоборот — забракуете все предложенные, и перейдем к гаданию на кофейной гуще в стиле «что же помешало микрософту за 25 лет сделать еще один способ» :-)quwy
13.09.2019 21:37вот пример (код) того что в трей можно поместить не только top level window, это работает, и это ломает всю красоту схемы
Каюсь, кода не дам, нет времени и возможности сейчас. Но вообще-то в NOTIFYICONDATA.hWnd очень даже можно передать дескриптор невидимого окна нулевого размера. Более того, чаще всего именно так и делают.
Или наоборот — забракуете все предложенные, и перейдем к гаданию на кофейной гуще в стиле «что же помешало микрософту за 25 лет сделать еще один способ» :-)
Сделать-то они могли все что угодно, но ресурсы у них были ограничены, время поджимало, было не до таких красивостей. А потом включился режим «если как-то работает, то не трогаем».viklequick
13.09.2019 23:05Каюсь, кода не дам, нет времени и возможности сейчас. Но вообще-то в NOTIFYICONDATA.hWnd очень даже можно передать дескриптор невидимого окна нулевого размера.
Да. И как правило (и как в примерах микрософта) — это топ-левел полученный через RegisterClass()/CreateWindow() :-)
Оттого что оно невидимое и оттого что у него размер (кстати неважно какой) — оно ведь не перестает быть top level.
Итого — вся правка должна была содержать три строчки в таск баре
и небольшой кусочек кода в обработке треяcase HSHELL_WINDOWDESTROYED: SendMessage(трей, WM_USER + NNN, 0, lParam); break;
case WM_USER + NNN: for(int i=0; i < m_cIconsCount; ++i) { if (IsDead(m_Icons[i])) { ReleaseIconContext(m_Icons[i]); MoveMemory(&m_Icons[i], &m_Icons[i+1], sizeof(m_Icons[0]) * (m_сIconsCount - i - 1)); --i; --m_cIconsCount; InvalidateRect(m_hWnd, NULL); } } break;
И в общем-то все, остальное и так есть и используется. Кстати заметьте, если «внутри» там список а не массив, то код будет чище и короче. Массив просто вероятнее.
И кстати, если бы это работало для топ-левелов, то все тут же бы стали использовать топ-левелы, это и сейчас так происходит, но стихийно.
qw1
12.09.2019 17:46+1HSHELL_WINDOWDESTROYED приходит при вызове DestroyWindow, не уверен, что он придёт при аварийном завершении процесса.
viklequick
12.09.2019 20:12DestroyWindow function
Destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it…
Это по очевидным причинам — не то :-)
K10
12.09.2019 09:48Это не баг, а логика работы иконок в трее.
Приложение, желая создать в трее иконку, вызывает соответствующую функцию.
Когда нужно иконку удалить, оно вызывает функцию удаления.
Если процесс приложения прибит, то функция удаления не вызвана и иконка не удалена.
В противном случае, процессу проводника нужно было бы следить за всеми процессами, создавшими иконки в трее, что имхо оверхед.Halt
12.09.2019 10:11+1Вы еще скажите, что за окнами, открытыми файлами и выделенной памятью тоже следить не надо, по той же логике. Это именно что корявый дизайн, сделанный на скорую руку.
quwy
12.09.2019 17:52Это разные уровни привилегий. Нотификэйшн-бар в пространстве пользователя, а средства зачистки всего вами названного — в ядре. А механизмов, которые бы из ядра сообщили юзермоду о смерти процесса, просто нет.
popov654
12.09.2019 22:13А таскменеджер — не в пространстве пользователя работает? У него же есть окно, в котором данные выводятся.
popov654
12.09.2019 21:06Ну а что, зато такты процессора не тратятся зря на ерунду, ведь убирать значки надо очень редко, а вот дёргать проверки — постоянно
Я думаю, какая-то такая причина за этим стоит :)viklequick
12.09.2019 22:10+1Причем очень несложная причина :-)
Невидимые окна можно создавать и удалять со скоростью во много раз большей чем сможет на них реагировать трей. Всего лишь.
Причем таскбару это не грозит — он отслеживает события активации / деактивации, это достаточно медленный процесс с переводом и обработкой смены фокуса, ввода клавиатуры, обработкой тонны событий в окнах и их содержимом, все эти erasebgnd, перерисовки, вычисления всего и вся (повторить для своих чайлдов рекурсивно), все то что реально происходит при смене активных окон.
Уж обвести рамочку вокруг плашки с иконкой (и опционально текстом) показывающим состояние — оно точно успеет. Более того — оно успевает и thumbnail снять и еще покурить и выпить чашечку кофе :-)
А вот трею надо как-то успевать реагировать (и быстро) на кипящий поток удаляемых окон, и проверять каждое — а оно вообще живо? А оно события от трея ловит? Ну и высчитать в связи с этим что показываем / не показываем, все эти хинты и подсказки, и прочая и прочая. В коде решили упростить (как оно обычно бывает):
... else InvalidateRect(весь трей целиком)
Во время тестирования нашлась-таки целая пачка программ от самого микрософт, которая заставила оный трей безудержно фликерить и выжирать ресурсы.
Потому и решили — вообще убрать, черт-те что получилось. Будем считать это фичей! А вызов кода перенесли на события от мыши.
Прошло двадцать пять лет…
Я полагаю что мой рассказик — весьма похож на реальные события, хотя конечно это только красивая гипотеза.popov654
12.09.2019 22:24Я первое своё предложение хотел выделить тегом <sarcasm>, но он увы съелся… Да, гипотеза верная скорее всего.
Правда, по времена, когда писался этот код, thumbnail никакой ещё не снимался от окна (вы ведь про отображение миниатюр в Aero?). И чтобы снять такую миниатюру, надо таки сначала дождаться полной отрисовки содержимого окна, так что тут всё сложнее…
А вот трею надо как-то успевать реагировать (и быстро) на кипящий поток удаляемых окон, и проверять каждое — а оно вообще живо? А оно события от трея ловит?
Это вы всерьёз или тоже как часть шутки? Какой там поток, мы что, окна в повседневной работе десятками в секунду открываем и закрываем? Или вы про фиктивные, которые «невидимые», и о которых знает только ОС? Но даже их наверное не столько. А уж тех, которые уже через вызов процедуры зарегали себя «в трей», вообще не больше 2-3 за раз обычно. Так неужели правда так сложно по этому списку проходиться линейно хотя бы раз в секунду, чекая их состояние (точнее, состояние процесса, привязанного к ним)? Мне кажется, даже для железа тех лет это совершенно тривиальная задача.
Да и фликерить тут нечему. Фликерить могло или на стресс-тестах, когда и правда десятки окон в секунду, или из-за криво написанного ПО, которое по нескольку раз пытается зарегать иконку, или из-за каких-то хитрых внутренних таймингов. Например, сначала в клиентском коде идёт регистрация иконки в трей, потом уже создаётся основное окно, и пока оно не создано, explorer считает, что иконки нет, а перед этим она как бы есть, а потом окно открылось, и она снова есть, и в итоге происходит скачок туда-сюда, что смотрится для пользователя безобразно. И в итоге вместо того, чтобы переписать код работы с иконками трея, пошли более простым путём, выпилив вообще мониторинг :)
В общем, почти как вы сказали, только скорее всего не в мерцании всего трея было дело (перерисовка раз в полсекунды с нормальной двойной буферизацией мерцать ну никак не должна).viklequick
13.09.2019 00:00Больше в шутку конечно. По факту — просто не сделали, потом никто не завел тикет на этот минорный баг, потом уже и легенды подтянулись, а там и окаменело. Но сделать — вполне могли, этому ничто не мешало.
drWhy
13.09.2019 10:42Фликерить могло или на стресс-тестах, когда и правда десятки окон в секунду, или из-за криво написанного ПО, которое по нескольку раз пытается зарегать иконку, или из-за каких-то хитрых внутренних таймингов.
А возможно дело было в debug сборке Windows, событий там происходит явно больше.
Из приколов в трее наблюдал скачущего жеребца, состоящего из нескольких соседних иконок, спектр-анализатор и миниатюру танцовщицы, двигающуюся в такт музыке. Всё живенькое и без глюков.
VioletGiraffe
13.09.2019 14:46Зато в десятке починили препротивнейший баг, выражавшийся в том, что запущенные программы иногда не получали значок в трее, хотя доллжны были :)
ProstoTyoma
13.09.2019 16:08Баги, несуразности, тормоза в продуктах MS не чинятся ДЕСЯТИЛЕТИЯМИ
По моим ощущениям, в десятке еще и насыпали неприличное количество новых.
Dmitri-D
11.09.2019 01:32Повезло. А могли бы еще и писать по 68 байт сотни тысяч вызовов. С синком. Каждый. Вот тогда было бы веселье.
Впрочем, 68 или не 68 — всё равно есть кеш диска и всё равно есть кеш системы. Проблема не в файле, а в количестве системных вызовов на один щелчек мыши. 100К — это слишком много.
ALF_Zetas
11.09.2019 01:33этот файл это список Quick access и поскольку я этой фичей Єксплорера не пользуюсь, то он у меня маленький и никаких тормозов не создает
Yastreb1332
11.09.2019 01:42после удаления файла f01b4d95cf55d32a.automaticDestinations-ms этот файл создается автоматически после запуска проводника
sumanai
11.09.2019 12:51У меня создался прямо сразу после удаления.
EvgeniyNuAfanasievich
12.09.2019 14:21значит делаем назначенное задание :-)
drWhy
12.09.2019 14:35Или переименовываем/удаляем папку %appdata%\Microsoft\Windows\Recent целиком, создаём одноимённый файл и ставим ему атрибут «только для чтения».
Мне вполне хватает истории файлов в приложениях, общесистемная не нужна.EvgeniyNuAfanasievich
13.09.2019 16:35Надо у system права отбирать и наследование выключать. надежнее.
drWhy
13.09.2019 16:40Конечно. Но пока хватает ;)
Как ни странно, простая вещь, а действует пока безотказно, приложения обычно не пытаются понять, что не так. Когда-то во времена разгула вирусов под xp помогало избавляться от особо назойливых.sumanai
13.09.2019 17:36приложения обычно не пытаются понять, что не так
Ага. У меня так Firefox после запрета на запись в каталог системных дополнений, где валяются всякие pocketы, тупо жрал одно ядро в цикле в попытках туда записать. Сейчас же лепит к остальным ((
aik
11.09.2019 06:51По идее, такой файл истории должен у каждой программы быть, которая на панели задач побывала — там же у многих история какая-никакая отображается по правой кнопке.
vis_inet
11.09.2019 07:23Интересно, можно ли безболезненно удалять все файлы в %appdata%\Microsoft\Windows\Recent\AutomaticDestinations?
У меня их там 44 штуки.
Размером от 4 Кб до 3 Мб.
Но, почему-то файла с именем f01b4d95cf55d32a.automaticDestinations-ms среди них нет.
HardWrMan
11.09.2019 07:32А в Windows XP многократный вызов контекстного меню в папке приводил к 100% загрузке процессора. Работает вплоть до SP3 и даже в виртуалке (скриншот ниже). Нагрузка спадает с закрытием контекстного меню.
Нотариально заверенный скриншотpopov654
12.09.2019 22:31Как вы это сделали?) У меня не воспроизводится. Win XP SP3, не виртуалка. Кликал правой кнопкой много раз, нагрузка около нуля.
HardWrMan
13.09.2019 07:56+1Выделяешь объект (на скрине я выделил диск) и права кнопка.
А вот, например, на папке
nerudo
11.09.2019 08:15+1А меня бесит, что если на таскбаре нажимаешь на кнопку, показывающую все значки рабочего стола, то порой все подвисает секунд на 10. На двух разных машинах.
chnav
11.09.2019 08:39Возможно есть ярлык на удалённую программу (пытается найти её в других папках) или на недоступный сетевой ресурс. У меня такое было в Windows 7.
nerudo
11.09.2019 08:41Я предполагал такой вариант, но найти ничего не смог. Видимо I must try harder…
balamutang
11.09.2019 10:24У меня кстати было подобное в одной конторе когда-то. В контекстном меню была ссылка на сетевой ресурс компьютера, который демонтировали. Соответственно каждый вызов контекстного меню в проводнике занимал 2 минуты, на время которых эксплорер-рабочий стол повисал полностью, тот еще квест был.
Хорошо что я тогда докопался до истины и получил опыт, тк обычно такое лечат переустановкой винды.drWhy
11.09.2019 10:49Или ссылка на сетевой принтер в пункте «Печать», проверяющая наличие бумаги в недоступном принтере.
Dvlbug
11.09.2019 13:02+1Проверьте еще обои на рабочий стол. Был случай, 16 мегайбайтный BMP лежащий на недоступном сетевом диске.
SandroSmith
11.09.2019 14:18ЕМНИП, это был случай с просто 16MB bmp-шкой при общей ОЗУ в 32MB. Когда просто сворачивание окна (с отрисовкой обоины) вешало машинку на минуту.
Kwisatz
11.09.2019 15:49По поводу сетевого ресурс: а есть простой способ удалить его при помощи интерфейса? Ждать таймаута очень утомительно и не всегда срабатывает.
site6893
11.09.2019 16:01-1через консоль,
"net use /?"
в помощьKwisatz
11.09.2019 16:12-3Даж не знаю что ответить.
Во 1 сам по себе ответ уровня «пошел на хрен»
Во 2 я говорю о способе для пользователей, это же винда, нужен мышевозильный способ
В 3 как ваш рецепт поможет удалить ярлык я не понимаюfiredragon
11.09.2019 21:08ПКМ на «сетевом окружении»
Отключить сетевой диск.
ЗЫ все же лучше повесить в логон скрипт авто детач.Kwisatz
11.09.2019 22:17А причем тут сетевой диск если в закладках висит ярлык на сетевую шару?
Про скрипты по телефону объяснить ну никак, а простого способа я не знаю.
При том что добавить такой ярлык мышечкой легко и просто, а выдернуть его оттуда может быть невероятно весело.
site6893
12.09.2019 15:541) я ж не няничка в детском садике чтобы тебя с ложечки кормить, хоть бы попробовал выполнить предложенную команду в консоли и посмотреть на вывод перед тем как писать глупости.
2) как-то определись, тебе простой способ или все же утомительно ждать таймаута.
3) что тебе мешает ярлык «просто удалить»? А лучше внимательнее перечитай свой коментарий на который я отвечал и покажи где там идеть речь о ярлыках.Wesha
12.09.2019 17:06+1Прежде всего — не "няничка", а вовсе даже "нянечка". (Тут граммар-наци отпустило).
хоть бы попробовал выполнить предложенную команду в консоли
А Вы все-все советы из интернета сразу в консоли пробуете?
Качельки лизнутьrm -rf /
тоже пробовали?site6893
13.09.2019 16:45+1хоспаде (грама-наци выхади). Там же ключ "/?" стоит. Если ты не в курсе что для видндовых команд этот ключ означате то о чем с тобой говорить, живи в своем мышевозном мире и не задавай глупых вопросов.
Сим бестолковую дискуссию заканчиваю.
chnav
11.09.2019 08:37+1Я не помню, когда появилось отображение в проводнике иконок у файлов в соответствии с заданной программой по-умолчанию, кажется в Windows XP. Добавило огромных тормозов при открытии папок, визуально видно как прорисовываются иконки последовательно для каждого файла. Когда после этого если запускаешь Windows 98 — кажется что проводник летает.
Меня вполне устраивали единообразные иконки для папок и отсутствие иконок для файлов. Я всегда включаю отображение расширения файлов, этого вполне достаточно.
Может кто-нибудь знает, как отключить иконки? Windows 7/10.ZUZ
11.09.2019 09:04+1Включить галку: "Всегда отображать знпчки, а не эскизы"?
https://winnote.ru/uploads/posts/2019-01/1548775263_disable_thumbnail_previews_file_explorer_5.pngchnav
11.09.2019 09:27Спасибо, попробовал — не помогло.
Выключал оба пункта:
— Always show icons, not thumbnails
— Display file icon on thumbnail
Я так понял первый пункт служит для отключения превьюшек (например, картинок), а второй показывает иконку типа файла на превьюшке.HardWrMan
11.09.2019 10:37А я просто делаю вид как список. Причем с самой Win95. Что со мной не так?
chnav
11.09.2019 10:52Вы всё делаете правильно, это я неправильно объяснил. Я тоже всегда включаю List View для всех папок.
Тем не менее слева от каждого имени файла всё-равно отображается иконка. Так вот в ранних версиях Windows (кажется ещё до Windows 95) этой иконки не было вообще. В следующих версиях она стала отображаться, но их было небольшое количество и они выбирались исходя из расширения файла (ОДНА иконка на каждое расширение), на этом этапе интерфейс стал тормознутее, но ещё приемлемо.
А далее пошло по нарастающей — у каждого расширения файла появилось по нескольку ассоциаций с программами, одна из которых — по-умолчанию. И на этом этапе появились тормоза.
Примерный сегодняшний алгоритм действий Винды, как я его понимаю.
1. Мы открываем папку в проводнике.
2. Берётся первый файл в списке, смотрится его расширение.
3. Лезем в реестр, посмотреть что там ему соответствует, какая программа.
4. Лезем в эту программу, чтобы взять от неё иконку.
5. Рисуем иконку рядом с именем файла.
GOTO 2 для следующего файла в списке.
Если их тысяча, да ещё на HDD — очень времязатратное мероприятие, невзирая на кеширование и пр. Для того чтобы просто показать мне список файлов производится куча ненужных действий.
Кроме того, для запускаемых файлов, файлов ресурсов и т.д. проводник лезет внутрь этого файла, чтобы вытащить иконку из него. Т.е. для того, чтобы показать мне имя файл в списке, этот файл нужно открыть и прочитать из него данные!!! Я понимаю заботу о простых юзерах — им предложено по-умолчанию показать красивую иконку и обязательно убрать расширение файла — но почему не сделать иконки отключаемыми? Слава богу расширение пока ещё можно включить…
Откройте папку с сотней файлов в любой виртуалке Windows 95 или Windows 3.1, NT — вы поймёте о чем я говорю, там список фалов любых размеров открывается мгновенно.HardWrMan
11.09.2019 11:13Это всё понятно. Для этого уже в Win98 точно был кеш иконок (который у меня на компьютерах с nForce2 постоянно слетал и показывал кашу). Не уверен за Win95.
CaptainFlint
11.09.2019 11:32Возможно, стоит посмотреть в сторону альтернативных файловых менеджеров. Скажем, Far Manager консольный, там значков нет по определению. А Total Commander поддерживает четыре разных режим для отображения значков, не считая дополнительных настроек.
ALF_Zetas
11.09.2019 12:04Примерный сегодняшний алгоритм действий Винды, как я его понимаю.
неправильно понимаешь — все иконки хранятся в кеше c:\Users\имяюзверя\AppData\Local\Microsoft\Windows\Explorer\chnav
11.09.2019 13:15Да всё-равно где они хранятся, их нужно прочитать и нарисовать, а ещё небось добавилось — проверить сам кеш на протухлость и обновить иконку в нем… Сделать тысячи системных вызовов, сто тысяч раз обратиться к реестру. Даже если всё это хранится в RAM это требует времени и ресурсов CPU.
Kanut
11.09.2019 13:24На самом деле лично у меня отношение к Windows Explorer уже давно такое же как к Internet Explorer. То есть использую его на свежеустановленной системе чтобы поcтавить нормальный File Manager.
Выше упомянутый Total Commander вполне себе прилично работает. Это если из бесплатных.
А уж если не жалко деньги на это дело потратить, то выбор ещё больше.
У нас на работе например Directory Opus по корпоративной лицензии и я им дико доволен. Даже иногда подумываю домой прикупить.mayorovp
11.09.2019 14:14А панель задач Far Manager тоже заменяет?
Kanut
11.09.2019 14:30Это я не в курсе. Именно Far Manager я не пользуюсь и панель задач меня более-менее устраивает в том виде как она есть. Но предположу что для этого тоже какие-то варианты найти можно.
drWhy
11.09.2019 14:41Контекстное меню и список процессов с подробностями Far поддерживает, нет причин, почему он не смог бы заменить панель задач.
mayorovp
11.09.2019 14:50Тут проблема в другом: чтобы воспользоваться фаром, надо на него сначала как-то переключиться. А без панели задач это сделать не так просто.
drWhy
11.09.2019 15:05shell=far.exe )
mayorovp
11.09.2019 15:13Это способ запустить FAR. А дальше-то что?
Вот у вас открыто 10 окон, из них — пять развёрнуты на весь экран. где-то под ними — FAR. Как быстро и просто добраться до него чтобы что-то там сделать?
Ещё интересный вопрос — что будет если его случайно закрыть. Современные винды вроде как упавший шелл перезапускают — а вот в XP после этого пользователь оставался с голым экраном, где не работало ничего кроме Ctrl+Alt+Del. Тоже так себе удобство.
drWhy
11.09.2019 15:40Не агитирую за замену проводника Far'ом, но это возможно. Кто пользуется только проводником, тому, видимо, не мешают его аппетиты, кто не пользуется — тому он (почти) не мешает.
Alt+Tab, кстати, продолжает работать после закрытия проводника.
Закрытие активного shell'а можно бы и запретить (хотя explorer.exe этого не делает). Но если уж закрыли, то да, Ctrl+Shift+Esc -> Файл -> Новая задача.
Современный Explorer.exe в Windows PE не запускается, Far вполне функционален.
Whuthering
11.09.2019 15:40Из Ctrl-Alt-Del можно стартануть произвольный процесс.
mayorovp
11.09.2019 15:50Спасибо, я знаю. Но заменой панели задач FAR это не делает.
drWhy
11.09.2019 16:34Чего именно не хватает? Списка запущенных приложений, миниатюр, контекстного меню, системного трея?
Существуют оконные менеджеры с заменой панели задач.mayorovp
11.09.2019 16:37+1Чего именно не хватает? Списка запущенных приложений, миниатюр, контекстного меню, системного трея?
Способа быстро и удобно переключиться на нужную задачу.
Существуют оконные менеджеры с заменой панели задач.
… не являющиеся Far Manager :-)
HardWrMan
11.09.2019 20:21Определённые горячие клавиши всё равно работают, даже если шелл прописан как far. И речь не только за Ctrl+Alt+Del
aleksandy
11.09.2019 20:59Как быстро и просто добраться до него чтобы что-то там сделать?
Запускаю FarManager в ConEmu, который по Ctrl+` доступен из любого места без проблем.
CrazysAlien
12.09.2019 09:48CTRL+Shift+ESC работало и работает — ещё до запуска шелла или при падении оного вызывает ДиспетчерЗадач из которого можно запустить его снова (и не только).
qw1
11.09.2019 21:09А панель задач Far Manager тоже заменяет?
Работающие в Far обычно пользуются клавиатурой. Панель задач больше заточена под мышь и она не особо используется. Для переключения задач удобнее нажимать Alt+Tab — это не функция проводника. Её улучшили в Win10 и она удобна.
MTyrz
11.09.2019 14:16+1Total Commander вполне себе прилично работает. Это если из бесплатных.
Я очень извиняюсь, но вообще-то Тотал не бесплатный. Он всю жизнь шароварный был. Тридцать евро стоит, если мне память не изменяет.Kanut
11.09.2019 14:25У нас 32-bit для частников идёт как бесплатная версия и платить надо только за 64. Да и то часто ключи бесплатно раздают.
Так что он может официально и не совсем бесплатный, но на практике частники за него не платят.CaptainFlint
11.09.2019 14:47Тотал разной битности никогда не лицензировался отдельно. Лицензия покупается единожды и действует на все версии и все битности, никакой специальной лицензии на 32-битку для частников не существует.
Имеется неофициальная позиция разработчика Тотала, что для домашних компьютеров он лично не возражает против бесплатного использования дольше, чем официальный триальный срок в 30 дней, при условии что пользователь при запуске честно нажимает 1-2-3 в стартовом диалоге, а не обходит этот момент тем или иным способом. Но даже с учётом этого называть программу «бесплатной» неверно.Kanut
11.09.2019 14:54Опять же возможно что "региональные особенности", но сейчас глянул и везде можно скачать "бесплатную версию" с возможным апгрейдом до полной за 30-40€.
Ну и у меня есть ключи, которые я в своё время получил "в нагрузку" при покупках компов и железа.
П.С. Да и пусть Total Commander глобально не бесплатный, но наверняка можно найти адекватную бесплатную замену эксплореру :)
MTyrz
11.09.2019 15:21Multi Commander довольно хорошо справляется с ролью бесплатной замены Тоталу. А эксплорер… да, «Мерседес» тоже адекватная замена «Жигулям» :)
CaptainFlint
11.09.2019 15:35Если на каком-то сайте предлагают скачать «бесплатную версию» Тотала, то скачивать с такого сайта обычно не рекомендуется. На официальном же сайте предлагается стандартный дистрибутив шароварной программы, каковой Тотал и является. Несмотря на то, что он не накладывает каких-либо ограничений на свою функциональность при отсутствии ключа — хоть в пределах триального срока, хоть по его истечении (не считая диалога 1-2-3) — это не даёт права называть программу бесплатной, поскольку это понятие регулируется текстом лицензии, а не наличием/отсутствием блокировок в программным коде.
Kanut
11.09.2019 15:50Ну всё-таки странички вроде chip, netzwelt, heise и иже с ними я бы к "таким сайтам" относить не стал. С них наверное пол Германии софт качает. Так что там вряд ли что-то нелегальное распространяется.
П.С. Но не суть важно. Забываем про Total commander(или покупаем его) и качаем какой-нибудь Multi или Free Commander, которые тут упоминали другие люди:)
karabas_b
11.09.2019 18:07Ну всё-таки странички вроде chip, netzwelt, heise и иже с ними я бы к «таким сайтам» относить не стал. С них наверное пол Германии софт качает. Так что там вряд ли что-то нелегальное распространяется.
На всех этих сайтах лежит обычная шароварная версия тотала плюс адварь от самого сайта.
MTyrz
11.09.2019 15:17Видать, я выпал из контекста.
Никогда про такое не слышал: хотя «у нас» может обозначать довольно разные места планеты, это правда.Kanut
11.09.2019 15:25Ну в данном конкретном случае "у нас" это как минимум Германия, а скорее всего и остальные немецкоговорящие страны. Потому что сейчас ради проверки скачал по быстрому такую бесплатную версию и там можно выбрать только немецкий язык. Но никаких предупреждений что версия только на 30 дней мне не выскочило.
CaptainFlint
11.09.2019 15:42И вот такого не выскочило?
СкринKanut
11.09.2019 15:56Неа. Но теперь самому стало интересно. Домой приду, накачаю отовсюду и буду проверять :)
Kanut
11.09.2019 18:47+1Так, извиняюсь, был неправ. Похоже везде шареварные версии лежат.
Один и тот же установщик на "чистом компе" выдаёт предупреждение, а на компе с уже установленным TC просто ставит его и всё.
drWhy
11.09.2019 14:42Far manager тоже был не бесплатным. Бесплатность ему явно пошла на пользу.
Whuthering
11.09.2019 14:50+1для русскоязычных он еще с древнейших времен был бесплатным вполне официально и легально, если ввести правильную строку на запрос серийника.
mayorovp
11.09.2019 14:56Но большинство моих знакомых на такие мелочи внимания не обращали и использовали крякнутую версию :-)
oldschoolgeek
11.09.2019 17:37+1У нас на работе например Directory Opus по корпоративной лицензии и я им дико доволен.
Ничего себе… Windows версия ещё живёт и развивается?
Помню, в середине 90х этот файловый менеджер очень любили владельцы Amiga, а на Windows он мне тогда не очень зашёл после Far.
viklequick
11.09.2019 14:19Примерный сегодняшний алгоритм действий Винды, как я его понимаю.
1. Мы открываем папку в проводнике.
2. Берётся первый файл в списке, смотрится его расширение.
3. Лезем в реестр, посмотреть что там ему соответствует, какая программа.
4. Лезем в эту программу, чтобы взять от неё иконку.
5. Рисуем иконку рядом с именем файла.
GOTO 2 для следующего файла в списке.
Вы забыли еще несколько таких пунктов…
Еще например есть такое
- мы читаем КАЖДЫЙ файл в папке чтобы определить что это.
- Если это EXE то мы вытаскиваем иконку из его ресурсов.
- Если это линк или пиф — то достаем то на что оно ссылается.
- Если это картинка — то мы читаем ей заголовок, чтобы показать размеры (превью — отдельный шаг!).
- Если это неизвестный нам файл — то лезем в реестр с проверкой по расширению, и т. д.
А еще есть Icon Overlay extensions. На каждую уже построенную иконку вызывается толпа внешних хэндлеров — вдруг один из них нарисует значок. К слову стрелочка поверх иконы, показывающая что это шорткат — именно так и реализована.
Ну и там еще много чего есть, кастомные column views и т. д. Так что там реально есть чему тормозить.
И это еще выносим за скобки тот факт, что напрямую к файлам эксплорер не ходит, потому что файлы могут быть виртуальными (ага, поддержка зипов, или фтп с вебдавом, или даже обмен файлами из ремот десктопа — именно вот таким провайдером). А еще не забываем что в список «файлов» попадают фавориты, закладки, «последнее», все эти «мое видео» и даже программы из контрол-панели.
Ну и не забываем, что все это тройным слоем обмазано через COM.
Нет, нельзя сказать что микрософт наговнокодила и забыла. Наоборот — они провели поистине гигантскую работу по оптимизации, на которую даже в ядерной файловой системе непрерывно натыкаешься…
Вот просто малюсенький примерчик. Смотрим в наш любимый (ну как любимый — был таким до co-signing drivers) IFS Kit, IRP_MJ_CREATE.
The IrpSp->FileObject parameter contains a pointer to the RelatedFileObject field, which is also a FILE_OBECT structure. The RelatedFileObject field of a FILE_OBJECT structure is used to indicate that a given file has been opened relative to an already open file object. This usually indicates that the relative file is a directory
Так вот в обычном конвенциональном file i/o этот самый RelatedFileObject присылал мне в драйвер только этот самый Windows NT Explorer и именно для получения этих самых иконок. Представьте, как надо было (в хорошем смысле) упороться, чтобы даже тут сэкономить пару байтиков и тактиков.
Кстати, задать этот самый каталог отдельным параметром можно исключительно через Native API.drWhy
11.09.2019 15:00+2читаем КАЖДЫЙ файл в папке
Проверяем прочитанное антивирусом.Так что там реально есть чему тормозить.
… провели поистине гигантскую работу по оптимизации
Действительно, работа титаническая. К сожалению, система всё больше забывает о пользователе, уходя в себя надолго даже на мощных конфигурациях.
Неплохо бы ставить приоритеты, например, сначала отображаем список файлов, потом подтягиваем подробности (если они к тому времени будут актуальны).
И чтобы Диспетчер задач можно было вызвать в любой момент, а не по окончании перерисовки всех страниц в Хроме.viklequick
11.09.2019 15:29+1читаем КАЖДЫЙ файл в папке
Проверяем прочитанное антивирусом.
Ух, антивирусы это отдельная печаль, причем как раз на открытие файла и ураганят в основном :-)
К сожалению, система всё больше забывает о пользователе, уходя в себя надолго даже на мощных конфигурациях.
С тех пор парадигма сменилась, лагерь Раймонда Чена с его вниманием к оптимизациям и совместимости давно отодвинут от руля, вперед идут молодые и горячие. Которые выросли в другую эпоху, для них те вещи которые еще 10-20 лет назад были «долго и дорого» — не стоят ничего.
Неплохо бы ставить приоритеты, например, сначала отображаем список файлов, потом подтягиваем подробности
(смеется) а все эти асинхронные и реактивные программирования, весь этот второй рассвет функциональщины, монад и чистых функций — они для чего нужны? Вот именно для этого. Чтобы «само» по очереди, не тормозя остальных.
(в раздумье — ставить тег sarcasm или нет, а то шутка получилась не совсем шуткой)
Async/Await-изация головного мозга (С). Вместо того чтобы делать алгоритм эффективным — его размазывают тонким слоем, и пусть тормозит :-)
Впрочем и ООП (OOA/OOD по Г. Бучу) тоже не для блоатвари придумывалось, а «получилось как всегда» (С).
И чтобы Диспетчер задач можно было вызвать в любой момент, а не по окончании перерисовки всех страниц в Хроме.
Кстати тут вообще элементарно должно было быть, при старте — залочить от свопа пару регионов ОЗУ с кодом и данными, поставить приоритет повыше, и будет всегда мгновенно переключать, тьфу и растереть. Почему нету за столько лет — непонятно.drWhy
11.09.2019 15:56С тех пор парадигма сменилась, лагерь Раймонда Чена с его вниманием к оптимизациям и совместимости давно отодвинут от руля, вперед идут молодые и горячие.
Но выход, конечно, есть! Молодых и горячих, не терпящих оптимизаций, усадить за $100 OLPC, и да пребудет с ними Сила (оптимизации).
Или указывать в системных требованиях коммерческого продукта честный актуальный конфиг машин разработчиков.viklequick
11.09.2019 19:13Чтобы смайлики в BSOD стали еще и анимированными? :-)
Увы, BYOD — и это будет топовый мак про, а ужастик- будет пыль собирать. Раньше на маках сидели только топы, а так — сядут еще и разработчики с тестировщиками.
Зато будет вероятен порт вижуалстудии под мак :-)
sumanai
11.09.2019 15:35+1Неплохо бы ставить приоритеты, например, сначала отображаем список файлов, потом подтягиваем подробности (если они к тому времени будут актуальны).
Вроде же так и есть. Не замечали зелёную полоску в адресной строке проводника, показывающую прогресс получения изображений вместо иконок?DrPass
11.09.2019 15:56Зеленая полоска в адресной строке проводника, это просто новая форма песочных часиков. Она прогресс не показывает, просто дает понять пользователю, что система там что-то делает.
Что касается прогресса получения изображений, это хорошо заметно на медленном диске, например, сетевом. Он прочитал несколько имен файлов, начал тянуть их для получения превью. Потом ещё несколько имен, снова тянет превью. Очевидно, это два параллельных потока, но сделано откровенно не продуманно, т.к. быстрая задача, после которой пользователь мог бы продолжить работу (получение списка файлов) затормаживается до окончания самой медленной и к тому же необязательной операции (вытянуть все файлы на предмет формирования превьюшек).
drWhy
11.09.2019 16:07+2Замечал, Far тоже сигнализирует проводнику прогресс.
Вообще, прогресс-бары в современных Windows — отдельная грустная песня. Раньше у данного компонента был один входной параметр — Progress, в %. Что там сейчас — не знаю, но именно к степени близости процесса к окончанию оно отношения не имеет. Обычно получаем бессмысленную анимацию, отражающую только факты, что, скажем данная инсталляция ещё не зависла и не закончилась.sumanai
11.09.2019 16:57Раньше и процент считался намного точнее. Сейчас, со всеми аналитиками, лучшее, что делают в МС, это прогресс бар, который прыгает сразу до 90% и дальше еле шевелится. Зато небось какой-нибудь менеджер получил прибавку за визуальное ускорение интерфейса.
Goodkat
11.09.2019 18:30+1Обычно получаем бессмысленную анимацию, отражающую только факты, что, скажем данная инсталляция ещё не зависла и не закончилась.
На самом деле инсталляция давно уже зависла и упала, анимация — это гифка загруженная в отдельной инстанции браузера (тоже зависшей, анимация отображается средствами ОС), который занимает 70 мб (на 64-битных системах — 110 мб) из 72 мб (на 64-битных системах — 250 мб) размера инсталлятора.
dartraiden
11.09.2019 17:34Проверяем прочитанное антивирусом.
Современные антивирусы сохраняют контрольные суммы проверенных файлов, а также используют возможности файловой системы NTFS, чтобы не проверять один и тот же файл слишком часто.
Naves
11.09.2019 09:45Все чаще посещает мысль, что если на современный комп поставить win98 и какой-нибудь офис 97, то получившееся простое рабочее место — печатная машинка, будет работать значительно быстрее и комфортнее, чем вот эти современные офисы 365 со всякими кортанами.
Я один такой ретроград, который не видит всех этих новых удивительных возможностей современных операционных систем для десктопов?
Если не рассматривать проблему браузеров, то слушать музыку и смотреть фильмы успешно можно было уже в 98 году. Для HD-видео в то время не хватало процессора, сейчас с этим проблем нет.
Ещё отдельной проблемой идет 3D, когда для новых графических функций, шейдеров, нужен был новый directX, который требовал новую версию ОС.
В целом революционных изменений на десктопах нет, поддержка тачскрина и жестов там не нужна, но мы все равно забабахали вам плитку на весь экран на серверной версии…Kanut
11.09.2019 10:16Я как-то пробовал установить win95 на более-менее актуальный комп. Началось с того что он не понимал NTFS, и пришлось форматировать в FAT. Потом пришли проблемы с драйверами, а точнее их отсутствием. Из-за отсутствия драйверов винда "не понимала" ни нормального разрешения экрана, ни вещей вроде USB (как впрочем и половину других разъёмов материнки).
В общем я поигрался и бросил эту затею :)
burzooom
11.09.2019 10:23так usb win95 стала понимать в каком-то сервис паке только, чо сразу Гейтс-то
Kanut
11.09.2019 10:26Это не претензия к Win95. Я скорее о том что поставить какую-нибудь "старую добрую версию" винды и работать на ней тоже скорее всего не особо получится. К сожалению :)
burzooom
11.09.2019 13:52Как и собрать заново ракету лунной экспедиции Сатурн. Вроде делали их, и не одну. А снова сделать точно такую же или с минимальными доработками — зась. Нет смысла.
aik
11.09.2019 11:07На современном компьютере вы упрётесь в драйвера. Уже даже семёрку иногда становится не так просто поставить.
На счёт 97 офиса — некоторых интерфейсных плюшек от более поздних версий всё же не хватает.Naves
11.09.2019 12:00Год назад ставил, даже смог выйти в интернет. Звук только не заработал.
habr.com/en/post/423339/#comment_19122437aik
11.09.2019 13:03А видео? Ну и «мышь сходит с ума», «только в режиме DOS-драйвера» и т.п. я бы не стал считать нормальной работой.
LevOrdabesov
11.09.2019 16:57+1Было бы очень интересно почитать хорошую статью на тему «что там технически (а не маркетологически) такого особенного в драйверах, что их нельзя производить под все распространённые ОС».
Где бы реквест разместить.
Вангую ответ«человекочасы, больше ничего»drWhy
11.09.2019 17:16Есть энтузиасты, неторопливо пилящие универсальные драйвера. В случае, если новые функции или структуры данных отсутствуют в старой оси, например xp, описывают структуры, добавляют функции или заменяют заглушками.
Есть программы, чаще бесплатные, имеющие драйвера, работающие в практически любой версии Windows, например HWiNFO. У неё даже версия для DOS есть.LevOrdabesov
11.09.2019 18:41Забавный факт о hwinfo: кидает в синий экран сервер на supermicro с raid-контроллером Adaptec (всё старое), под плиточками (Windows 2012). Тот же сервер в той же ситуации под 2003 вёл себя прилично.
Очень полезное обновление ОС, что и говорить.
dartraiden
11.09.2019 17:38Так и пишут. Вопрос в том, с какого процента пользователей прибыль от них окупает затраты на написание и поддержку.
У Windows 98 менее 0.01% рынка, это считается «распространённой операционной системой»?
aik
11.09.2019 18:08Я бы не назвал 98 распространенной ОС. ;)
LevOrdabesov
11.09.2019 18:49Ну да, стараниями корпорации-производителя.
Но производительность труда во временной период с Windows 98 до Windows 10 выросла (и то не факт, кстати) не благодаря якобы современным и чрезвычайно полезным технологиям в более новых ОС. Многие пользователи до сих пор впадают в шок при предложении воспользоваться поиском на локальном диске, никакие плиточки это не исправили.
realspinner
11.09.2019 11:41+1Недавно мне подарили живой 286-й дектопчик Olivetti. Там был DOS, Norton Commander и Windows 3.1. В это трудно поверить, но я был буквально шокирован тем, насколько мгновенно эта антикварная машинка откликается на действия пользователя. Без всяких SSD, многоядерности и гигабайтов RAM: загрузка программ, работа меню — всё очень быстро, никаких раздражающих лагов. Это удивительно, учитывая, что в 90-е я такой техникой вовсю пользовался. Вроде должен помнить…
Выходит, за последние 30 лет подо всеми визуальными красотами мы напрочь забыли, как должен работать UI здорового человека. Да, я понимаю бездну, отделяющую однозадачный DOS от Win10, но чёрт возьми, никогда не поверю, что все эти лаги современных OS абсолютно неизбежны.balamutang
11.09.2019 12:07Вот-вот. Я помню как мне принесли 486 с 12мб памяти чтоли в 2006 году.
Это был просто зверь, 95 там летала, как не летала XP на современных тогда Атлонах и P4 с гигом оперативки. Ворд открывался почти моментально, без шуршания на диске.memba
11.09.2019 14:17У меня в 97 году был 486й с 8мб и Windows 95 отлично работал.
Потом у меня долго время был Pentium II с 32мб и Windows 2000 и все было хорошо.
Сейчас у меня mac и он съел 16гб и хочет еще.Goodkat
11.09.2019 18:41Эти 16 гб съел, наверное, хром.
extempl
12.09.2019 08:04Я вот всё смотрю на эти бесконечные посты о прожорстве хрома и не понимаю о чём речь (точнее, понимаю, конечно). Мне моих 16 хватает всегда с головой, сейчас хром "стабильно" резервирует 3.65 и больше не просит.
Осмелюсь предположить, что дело в кол-ве вкладок. У меня их сейчас всего 12 + где-то столько же расширений разного рода. А не 150. ЧЯДНТ? Может, всё-таки, проблема не в Хроме? Может надо, наконец, научиться пользоваться закладками read-later-ами и прочими инструментами, которые просто наводят порядок, речь даже не об оптимизации использования памяти (об этом я как-то мало думаю, оно само).
Может показаться что 3.65 это дофига на всего 12 вкладок, но это ± константное значение и в моменты рабочей нагрузки в виде ?30 вкладок, которые закрываются в течении получаса (ибо нефиг). И Хром по природе использования макбука перезапускается только при обновлении. То есть живёт неделю-две.
Простите, вырвалось.drWhy
12.09.2019 09:36Сопоставьте ваши 16 с минимально требуемым 1 ГБ.
Реальный минимум сейчас 8. И при 8 же можно отключить свап, всё зашевелится заметно быстрее и перестанут протираться дырки в hdd/ssd (офис без фотошопов).
Ещё весной можно было работать без свапа на 4 ГБ, сейчас стал любой браузер на четырёх вкладках вылетать, а со свапом половина времени уходит на него.extempl
12.09.2019 11:04Не, это-то я понимаю (есть рациональное зерно, да).
Но ведь все вокруг говорят, что у них 16 выжираются в ноль и переходят на 32 и 64. И их, якобы, не хватает.
Так мне 16 хватает и на хром и на IDEA, которая тоже не закрываясь живёт неделями.
F0iL
12.09.2019 11:13Тут есть две проблемы. Первая проблема в том, что независимо от браузера, современный Web стал очень жирным, и этот процесс идет с каждым годом и даже с каждым месяцем. Увеличиваются объемы контента (пара десятков мегабайт графики при заходе на какой-нибудь лендинг в наше время не такое уж редкое явление), увеличивается обскриптованность сайтов и растут объемы фреймворков (у того же фейсбука реально загружается чуть ли не несколько мегабайт JS-кода), расширяются веб-стандарты, включая в себя уже далеко не только веб-фичи, но и кучи всего остального, сам по себе DOM штука тоже жирная и жручая, а ведь он основа современной веб-разработки, и т.д.
А вторая проблема, на самом деле, в Хроме, а еще на самом деле это не проблема, а фича.
У Хрома сознательная политика — все, что можно кэшировать, будем кэшировать, все что можно буферизовать, будем буферизовать. Поэтому, соответственно, он постепенно использует всю доступную ему в системе память.
Плюс там есть механизм обработки Memory Pressure, который определяет, что памяти в системе осталось маловато, или же система начинает своппится, и этот механизм посылает разным компонентам хрома сигнал о том, что надо бы подчистить кэши-буферы и вообще ужаться. Если памяти совсем-совсем не хватает (уровень critical), то хром начинает выгружать открытые фоновые вкладки и отключать некоторый функционал.
Другое дело, что эта самая «определялка memory pressure» иногда работает не очень хорошо, а под Linux так разработчики Хрома ее вообще сломали и выпилили несколько лет назад, и не хотят мержить обратно мои патчи её возвращающие. Но это уже совсем другая история :)extempl
12.09.2019 11:17У Хрома сознательная политика — все, что можно кэшировать, будем кэшировать, все что можно буферизовать, будем буферизовать. Поэтому, соответственно, он постепенно использует всю доступную ему в системе память.
Да, об этом я слышал, но, честно говоря, никогда не наблюдал.
а под Linux так разработчики Хрома ее вообще сломали и выпилили несколько лет назад, и не хотят мержить обратно мои патчи её возвращающие
А как дела с Chromium? Используете свой билд с патчем?
Я полагаю, билд для OSX больше схож с билдом для линуксов, чем для Win. Или есть различие в этой самой "определялке memory pressure"? Праздный интерес.
F0iL
12.09.2019 11:29Я полагаю, билд для OSX больше схож с билдом для линуксов, чем для Win. Или есть различие в этой самой «определялке memory pressure»?
Есть. В OS X используется другой механизм для определения, не такой как в Linux (благо, там в макоси есть отдельный sysctl для определения состояния потребления памяти, в отличие от Linux, где приходится танцевать с бубном для этого), поэтому при сборке под Мак компилится другой код, и, судя по всему, вполне должен работать.
drWhy
12.09.2019 12:34Интересно, Memory Pressure как-то различает физическую и виртуальную память? Т.е. в системе с малым объёмом физической памяти и большим свапом он убережёт Хром от чрезмерного аппетита?
F0iL
12.09.2019 14:11На OS X оно целиком и полностью полагается на системный параметр, а как именно ОС считает-оценивает надо смотреть.
Под Windows анализируется именно доступная _физическая_ память (поле ullAvailPhys из результата вызова GlobalMemoryStatusEx), как оно себя ведет в реальных условиях я не знаю (подозреваю, что винда как и Linux с установленным vm_swappiness начинает скидывать страницы памяти в своп задолго до исчерпания всего объема физической памяти).
Под Linux тоже использовался параметр MemAvailable (свободная физическая память плюс системные кэши-буферы которые могут быть легко освобождены) из /proc/meminfo, как дополнительный источник проводился анализ интенсивности page faults (быстрый рост этого параметра говорит о том что система активнос своппится), правда, там в коде был один WTF, поэтому я не уверен, что оно действительно работало :)
sumanai
12.09.2019 14:09Осмелюсь предположить, что дело в кол-ве вкладок.
Firefox держит сотни вкладок, так что проблема в хроме.extempl
12.09.2019 14:40Скорее так — Firefox лучше справляется с ненормальным пользованием браузером и полным хаосом в виде бесконечного числа вкладок выкидывая из памяти неактивные или те, которые давно не открывались.
Проблема самого факта сотни вкладок при этом никуда не девается.khim
12.09.2019 15:10+5А давайте вы не будете за меня решать как мне вкладками пользоваться?
Лет 10 назад во время распродажи на одном сайте я делал следующее: брал список товаров (250-300 наименований) и открывал все в соответствующем количестве вкладок. Тупо скриптом. Потом брал ноут под мышку и в метро (тогда в метро WiFi не было) отбирал интересное мне — просто нажимая Ctrl-Tab и Ctrl-W.
Сейчас, ради интереса, попробовал то же самое сделать. И вы, знаете, получилось! Правда есть одно маленькое отличие: 10 лет назад я это на ноуте делал и он не перегревался от этого. Сегодня моя рабочая станция вошла «в режим турбореактивного двигателя» (в который она обычно входит, когда я что-то компилирую), Chrome занял несколько десятков ядер и больше 100GB памяти.
А что я в обмен получил? Кучу дизайнерских изысков? А нельзя ли их того, в попу? И вернуть мгновенный отклик? Мне он гораздо больше нравится, чем всё эти, нафиг мне не нужные, дизайнерские изыски…extempl
12.09.2019 15:18+1А что я в обмен получил? Кучу дизайнерских изысков? А нельзя ли их того, в попу? И вернуть мгновенный отклик?
Ну это, понимаете ли, решает спрос. Всё-равно что требовать интересные текстовые квесты вместо этих чертовски красивых игр с тупым бездумным сюжетом.
Люди хотят красиво, люди хотят интерактивно со всеми этими новомодными свистоперделками. Маркетинг он же тупой, что деньги приносит, то и требуют от девелоперов. Унылые магазины без капли js нынче, очевидно, не приносят прибыли.
ЗЫ А ещё дешевле разрабатывать, конечно.DrPass
12.09.2019 21:58Люди хотят красиво, люди хотят интерактивно со всеми этими новомодными свистоперделками.
Да не хотят люди свистоперделок. Люди хотят от магазина, чтобы там было просто и удобно найти товар, почитать про него, сравнить его и купить его, только и всего. И чтобы он не тормозил при этом.
Проблема в том, что зачастую, как вы написали,Маркетинг он же тупой
Компании неплохо оценивают потребности людей в товаре, но что касается пользовательского дизайна интернет-магазинов и т.д. никто толком не погружается в потребности пользователей. Сайты разрабатываются так, чтобы картинка нравилась кому-то из боссов, только и всего. В лучшем случае ещё SEOшника послушают.
Чтобы в этом убедиться, понаблюдайте как-нибудь, например, за процессом разработки логотипа компании. Там обычно будет на пару месяцев обсуждение между боссами, маркетологами и дизайн-студией цветов, закорючек, о том, какой посыл для пользователей несёт какой завиток, штырёк и финтифлюшка.
Потом ради интереса можете у любого участника дискуссии спросить, например, какие марки одежды они носят или какое кофе предпочитают. А потом попросить нарисовать их логотипы. Никто ничего не вспомнит, кроме может быть лого ЛаКоста, ещё помнят Кока-колу, Пепси, МакДональдс и лого автомобилей. Они даже логотипы своих партнеров хрена с два нарисуют (ну, дизайнерское агентство нарисует, да). А так, они в здравом уме и сознании будут тратить кучу денег и времени на разработку штуки, на которую по факту будет глубочайше наплевать всем их клиентам/партнёрам. Так же и с дизайном магазина. Многие уделяют кучу времени на разработку вторичных, никому не нужных вещей, в ущерб основному и востребованному функционалу.
khim
13.09.2019 00:19Унылые магазины без капли js нынче, очевидно, не приносят прибыли.
Ага. И если страница в Юлмарте занимает 10 мегабайт, а в НИКСе 1 мегабайт, то НИКС будет в 10 раз более популярен. Ага-ага.
На самом деле как раз Интернет магазины — не очень показательны, потому что ими пользуются независимо от дизайна: цены и быстрая доставка важнее.
Лучше посмотреть на вещи, для которых дизайн действительно важен: Skype там или Digg. Я не знаю ни одного случая, когда пердосвистелки приводили что-либо к успеху — зато полно случаев, когда они приводят к тому, что пользователи тупо сбегают. Да, блин, посмотрите на Windows 8 и 10: если бы людям действительно были интересны пердосвистелки, то не пришлось бы их варивать чуть не под дулом пистолета.
Просто на всю эту муть, как правило, находятся деньги, когда дело и так идёт на лад — ну и при должном обхаживании ушей начальства можно убедить его что это всё от пердосвистелок.
ЗЫ А ещё дешевле разрабатывать, конечно.
Нет, главное — марекетологи могут «осваивать бюджет».extempl
13.09.2019 08:33Всё не так просто. Кажется, что оно действительно не нужно, не важно и лучше б открывались статические страницы по 200кб. Но небольшой нюанс в том, что при прочих равных (а на ценах играть ой как не просто), для конечного потребителя будет играть привлекательность и простота в использовании. Например, лет с 10 назад у нас (в Украине) была куча однообразных магазинов. Но выстрелил тот, у которого интерфейс был поприятнее, и у которого фильтр удобный. Это потом он уже стал де-факто основным (сейчас продаёт не только свой товар, типа яндекс маркет, чтоли). Магазин при этом не является самым дешёвым, и доставка сейчас в нём удобнее только по той причине, что он основной (раньше не было особо разницы). При всём при этом, можно пойти в соседний и взять там дешевле. Но вот, зараза, к этому (как к основному), вроде и доверия больше. Такие дела.
А потому что — удобный фильтр. Потому что список желаемых товаров. Отслеживание поступления. Потому что ± нормальное заполнений характеристик и сравнение по характеристикам. И динамическая подгрузка списка. И много ещё всяких удобных штук, реализованных на клиенте.
И потому что можно было не делать так:
Лет 10 назад во время распродажи на одном сайте я делал следующее: брал список товаров (250-300 наименований)
Это можно было делать сильно проще и удобнее.
Основной вопрос не как быть привлекательным для клиента. А как выделиться перед тем магазином, который уже привлекательным является. Просто упростив интерфейс до минимума сегодня уже не сработает. Почему — это другой вопрос. Это, наверное, может сделать только условный монополист, уже состоявшийся магазин с именем и потоком клиентов.
cc DrPass логотип не самый удачный пример. Логотип это чистое ЧСВ. Как крутой логин себе придумать или аватарку нарисовать.
CaptainFlint
13.09.2019 12:27Просто упростив интерфейс до минимума сегодня уже не сработает.
Есть разница между «упростить интерфейс» и «оптимизировать производительность». Некоторые упрощают так, что остаётся две кнопки, а тормозит на порядок-два сильнее из-за десятков слоёв всяких реактов, вью и прочих ангуляров.
DrPass
13.09.2019 13:04Например, лет с 10 назад у нас (в Украине) была куча однообразных магазинов. Но выстрелил тот, у которого интерфейс был поприятнее, и у которого фильтр удобный.
Ну не совсем так. Розетка выстрелила тем, что едва не единственная из всех вложилась в рекламу, причем на ТВ. И в итоге получила огромный бонус в виде тех клиентов, которые раньше вообще ничего не покупали в интернет-магазинах. А тут о-па, цены оказались заметно ниже, гарантия, сервис — всё присутствует. В общем, тут тупо победил тот, кто на старте инвестировал в раскрутку больше денег.
Основной вопрос не как быть привлекательным для клиента. А как выделиться перед тем магазином, который уже привлекательным является.
Знаете, как среднестатистический клиент интернет-магазина выбирает между ними?
Есть три основных пути:
1. Заходит на сайт того магазина, где брал что-то в прошлый и понравилось, и сразу покупает там.
2. Кто попродвинутее — открывает агрегатор цен вроде Яндекс.Маркета, или Хотлайна в случае Украины, ищет там самое выгодное предложение, покупает по нему.
3. Кто про агрегаторы не в курсе, гуглит «купить такую-то штуку», и выбирает самый дешевый вариант из того, что предложил поисковик.
При этом во втором и третьем кейсе клиент может уйти из интернет-магазина без покупки, если там кривой/глючный/непонятный интерфейс или он просто сильно тормозит, и перейти к следующему по списку.
При этом на дизайнерские изыски клиент вообще никакого внимания не обратит, он даже и не запомнит там ничего. Наоборот, чем интерфейс будет стандартнее (слева категории товаров и фильтр, в карточке товара слева фото, справа кнопка «купить», ниже табы с описанием/характеристиками/отзывами, вверху корзина и т.д.), тем больше вероятность, что он его купит. Соответственно, чем больше сайт магазина вложился в разработку уникального дизайна UI, тем меньше у него будет конверсия :)
extempl
13.09.2019 08:39Касательно мессенджеров достаточно посмотреть на модные ныне стикеры. Это не просто свистоперделки, это свистоперделки в вакууме. Скайп просто сильно устарел, как в своё время icq.
drWhy
13.09.2019 11:08icq не закрывал протокол, хотя был его разработчиком. Была куча совместимых клиентов, Miranda, например. И мессенджер долго пользовался популярностью даже после того, как родным клиентом стало пользоваться совершенно невозможно. Скайп же давно топчется у этого порога.
khim
13.09.2019 12:52icq не закрывал протокол, хотя был его разработчиком
Он его как раз закрывал и регулярно менял. В попылках извести сторонние клиенты.
И мессенджер долго пользовался популярностью даже после того, как родным клиентом стало пользоваться совершенно невозможно.
Примерно до того момента, когда они стали менять протокол настолько часто, что пользоваться сторонним клиентом стало почти невозможно, а родной они изуродовали до этого так, что это тоже не был разумный вариант.
Убили сами себя, по большому счёту.drWhy
13.09.2019 13:12Закрывал, менял, но года три назад ещё можно было читать аську клиентом на асме весом в 2 КБ, отсылать правда давно нет. Миранды исправно апдейтили протокол.
А сколько есть альтернативных клиентов для Skype?khim
13.09.2019 14:01А сколько есть альтернативных клиентов для Skype?
Для Skype есть только альтернативные мессенджеры. Так что ситауции, когда оффициальным клиентом пользоваться уже нельзя, но народ пересаживается на неоффициальные и продолжает пользоваться у Skype не будет.
В результате народ уходит. Просто уходит.
extempl
13.09.2019 08:41А ещё дешевле разрабатывать, конечно.
Скорее имелось в виду, что для того, чтоб сделать быстрый, функциональный и не жрущий ресурсы сайт, нужно влить в него дополнительно денег и времени (то есть, ещё больше денег, уже недополученных от несвоевременного запуска). Или изначально нанять синьоров, которые без потери времени (но естественно, с потерей денег) сделают.
drWhy
12.09.2019 15:57Ещё вы получили уйму шифрования и прорву кликов по кому-то нужным ссылкам.
Зато теперь ноут можно с собой не носить — в метро есть 4G, а rdp на домашний сервер можно и с телефона ходить.
Можно добавлять в системные требования профиль «Оптимум»: 32 ядра, 128 ГБ ОЗУ.
Eldhenn
12.09.2019 13:17Не надо сказки рассказывать. На 8Мб Чикага _запускалась_. Что-либо серьёзное запустить в ней уже не всегда удавалось.
viklequick
12.09.2019 13:37Я на четырех в оной «чигаге» на спор запускал ворд, а в нем вставлял по OLE эксель. Диском шуршало минут пять, но справилось. Причем весь «тюненх» был в том что я убрал нескучную обоину размером 800 на 600 16-бит, и поставил однотонную заливку.
DrPass
12.09.2019 13:46Не надо сказки рассказывать. На 8Мб Чикага _запускалась_.
Не надо сказки рассказывать (с). В 1996-м году эти 8Мб были самым обычным объемом памяти для компьютеров. На них Чикага абслютно нормально работала, а OSR2 было тесновато, но тоже работало. По крайней мере, Word 95, Excel 95, Delphi 2 — всё это там достаточно комфортно вертелось.Ogra
12.09.2019 20:48Ну ни разу не комфортно. Помню я редактирование монографии в Word 95 на 486DX4-100, это было весьма неторопливое занятие.
TurboPascal вот отлично работал, было дело… ;)DrPass
12.09.2019 22:03До монографии я тогда не дорос, но курсовую на 120 страниц (плюс картинки, таблицы) в Win95 на Pentium-150 с 8 метрами памяти я набирал. 120 страницЭ естественно, вышло за счет того, что мне нужно было исходный текст программы включить в пояснительную записку. Вполне годно было. Хотя уверен, монографией с кучей формул/объектов его было бы несложно ушатать.
Ogra
13.09.2019 04:12Я тогда еще в школе учился, а после школы к маме на работу ходил, ведь там был комп(!). И с версткой монографий помогал, и на паскале учился писать, и в Героев играл…
Fedorkov
11.09.2019 13:18+1Линукс даёт очень большой простор для урезания/неустановки ненужных фич. Не DOS, конечно, но всегда можно сделать так, чтобы он летал на самом дохлом железе.
alexkmbkdr1
12.09.2019 09:49Ага, только если не открывать веб браузер, да что там, даже gedit довольно тормозной.
Fedorkov
12.09.2019 12:21Если всё настолько плохо, можете использовать vim/emacs/nano и lynx.
И это — не предел. Линукс даёт очень большой простор для урезания/неустановки ненужных фич.
WinPooh73
11.09.2019 13:30+1Десктопные UI это ещё ничего. Вот кто бы объяснил мне, о чём задумывается компьютер в терминале Макдональдса. Когда тычешь пальцем в кнопку с гамбургерами, а новый экран открывается не быстрее, чем через 2-3 секунды.
mapron
11.09.2019 14:40Мак по 5 сек это еще нормально, бургеркинговский может минут на 5 зависнуть запросто. я однажды решил воспользоваться, он завис, спросил кассира «ну подождите, он у нас несколько минут думает. ну или я могу ваш заказ принять» на мой закономерный вопрос «а что тогда должен экономить этот терминал?» кассир ответа не нашла)
LevOrdabesov
11.09.2019 17:00Ну как: идентифицирует вас через фейсрекогнишн на сервере в китае, потом лезет через облако в штатах на ваш банковский счёт на арендованном сервере в нидерландах, и пытается нейросетью (на серваке в грендандии, там дешевле, потому что холодно) выяснить, какой бутер вам ещё предложить, чтобы с вероятностью более 50% вы его таки взяли.
Надеюсь, что сарказм.
khim
12.09.2019 00:06Выходит, за последние 30 лет подо всеми визуальными красотами мы напрочь забыли, как должен работать UI здорового человека.
Нет, всё произошло, во-первых, не за 30 лет, а всего лишь за 10-15, а во-вторых «в действительности всё совсем не так, как на самом деле».
Вот возьмите этот самый Windows 3.1 — под какое железо его разрабатывали? Ну известно, под какое: IBM PC AT, 80286, 6MHz. А DOS и Norton Commander (у вас ведь там на 4я-5я версия, да?) — так и вообще под IBM PC, 8086, 4.77MHz. Кстати даже Windows 3.1 Beta на IBM PC, 8086, 4.77MHz встаёт — поддержку этой железяки выкинули буквально перед самым релизом, когда стало уже понятно, что там оно всё работает как-то неприлично медленно.
А ваш Olivetty имел проц на 20-25MHz, плюс быструю память, наверняка — то есть как минимум раза в 3-4, чем то, подо что всё это разрабатывалось. И в 10 раз быстрее, чем то, подо что планировалось.
А в 90е — так разница могла в 10 раз реально быть (80386DX 25MHz vs 486DX4 100MHz — соответственно подо что Windows 95 разрабатывалось и на чём она, обычно, работала).
Разумеется при такой разнице между ожиданиями и реальностью всё «летало».
Я кстати не зря про Norton Commander 4-5 вспомнил. Olivetty у меня нет, но есть PCem, он неплохо эмулирует старое железо — вплоть до скорости работы (хотя жёсткий диск там бесконечно быстрый, конечно). Так вот попробуйте запустить Norton Commander 5.5 под эмуляцией IBM PC XT… И вы офигеете от его томознутости. А ведь он, как бы, под это железо, теоретически, «заточен»…
Так что… Разучились делать нормальные интерфейсы люди где-то в середине 80х (когда железо начало резко ускоряться и лёгкие программы с треском вылетали с рынка, а на их место приходили тормоза… которые пользователи не ощущали как тормоза из-за резкого буквально «взлёта» производительности железа).
Ну а дальше, когда вся индустрия за десятилетия оказалась заточена строго и исключительно под выпуск тормозных монстров… случилось страшное: где-то с 2005го года скорость однопотока, вдруг, резко «встала» (современный процессор в однопотоке быстрее Pentium 4 на 3.8GHz десятилетней давности раза в 3, от силы… это за 10 с лишним лет!). UI это, в основном, однопоток (даже сегодня), всё сериализовано, ваши 8-10-20 ядер могут отдыхать… Ну и… имеем то, что имеем.
С точки зрения-то разработчиков почти ничего не произошло: на топовом железа всё это и 20-30 лет назад и сегодня работает «сносно», а вот у пользователей — беда: раньше они задёшево покупали железо, в несколько раз быстрее, чем те «монстры» на которых это всё разрабатывалось… а теперь они и то, что видел разработчик (и подо что всё и «заточил») — не могут себе позволить.
Nalivai
11.09.2019 15:03Если компьютер использовать только как тупую печатную машинку, то можно открыть любой тупой текстовый редактор и радоваться, почему бы нет. Другое дело, что захочется функций которых в тупом текстовом редакторе нет, но их и в 97м не было
balamutang
11.09.2019 15:26+1Но мс офис 97 был вполне съедобен. Офисные пакеты вообще обычно средним пользователем используются на 5% от возможностей, что тогда что сейчас. Может в экселе можно было упереться в 16384 строк ограничения против нынешних бесконечных, а так я наверно больше не знаю чем нынешние пакеты лучше чем те.
Whuthering
11.09.2019 15:42Офисные пакеты вообще обычно средним пользователем используются на 5% от возможностей
Я бы сказал, что на 10%, из которых 5% для всех общие, а вот остальные 5% — для каждого разные :)
wyfinger
11.09.2019 16:04Не повторяйте эту ерунду про 5%. Кто это посчитал, откуда цифры?
Не знаю как там «средний пользователь», но моя контора, не имеющая отношения к IT постоянно использует в MS Office:
1. VBA макросы, без него жизни нет;
2. Поля вроде как здесь;
3. Условное форматирование в Excel;.
4. Формулы в последних Office стали нормальными, с ужасом теперь вспоминаю MathType.
5. Inquire в Excel.
5% и «средний пользователь», это если 95% пользователей только просматривают документ и им достаточно одной функции — просмотр, но это не работа с документом.drWhy
11.09.2019 16:22+1VBA, поля, автонумерация, условное форматирование были давно.
Другое дело, что VBA несколько раз с тех порломалименяли.
Inquire не использовал.
Проблемы с формулами MathType были связаны с интеграцией в офис чужого платного продукта, с перекладыванием лицензионных тонкостей на плечи пользователей. Зато сейчас формулы написаны на Java.
К ограничению количества строк в Excel, упомянутому balamutang добавлю малое количество доступных для отображения цветов (недавно пришлось делать градиентные заливки в старом Excel).wyfinger
11.09.2019 16:46Я про использование функций, а не про «давно было».
А не знаете есть у них нормальный багтрекер? а то давно подрывает на реддине начать сабреддит «What a fuck Microsoft?».drWhy
11.09.2019 17:34Багтрекер не подскажу, извините.
А добавить про «давно было» могу.
Обращался когда-то в техподдержку. Пользователь нечаянно удалил в общей папке подпапку с кучей файлов. Восстановили из архива. Руководство спросило, можно ли запретить удаление. Конечно можно, есть отдельный атрибут NTFS, запрещающий удаление файла!
Ставлю. Пользователи жалуются, что не могут нормально редактировать файлы офиса. Разбираюсь — при записи отредактированного файла сначала создаётся новый временный файл с уникальным именем, в него сохраняется новое содержимое, затем удаляется старый файл, а новому присваивается его имя. Т.е. присутствует операция удаления файла, которая запрещена. Предыдущая версия офиса позволяла настраивать путь к временным файлам, новая (на тот момент) писала их строго в папку, откуда открывала редактируемый файл (т.е. сетевую).
Запрашиваю техподдержку, как быть. Есть два оплаченных продукта (офис и ос), в них есть нужная функциональность, но из-за изменений в одном из продуктов корректное совместное функционирование невозможно. После недели переписок ответили, что мой запрос выходит за рамки пользователькой поддержкиpopov654
12.09.2019 22:48Извините, я вот не очень понял в этой истории — каким образом к проблеме удаления и переименования затем временного файла (я знаю про этот момент, т.к. у меня включен показ скрытых файлов, и я часто редактирую файлы прямо с рабочего стола) относится возможность задавать путь ко временным файлам?.. Потом после закрытия программы офису ведь всё равно придётся удалить и перезаписать оригинальный файл, где бы он ни был.
drWhy
13.09.2019 11:16В сетевой папке появляется ещё один файл (временный), который потом нужно удалить.
А исходный файл удалять необязательно, достаточно усечь его до нулевого размера и записать новое содержимое. Противоречия с установленными атрибутами при этом не возникает.
А временные файлы вообще странно держать на сетевом диске.khim
13.09.2019 13:00А временные файлы вообще странно держать на сетевом диске.
Поведение, которое описано выше (создать новый файл, записать туда, атомарно переименовать временный файл в файл под старым именем) — это единственный способ атомарно заменить содержимое файла на другое. Потому редакторы так и делают. Разумеется для реализации этой схемы временный файл должен создваться на том же диске, куда записывается документ.
А исходный файл удалять необязательно, достаточно усечь его до нулевого размера и записать новое содержимое.
Только тогда есть шанс, что вы, в какой-то момент, потеряете свой файл вообще, если сеть отвалится в неподходящий момент. Если вы его усечёте, а новое содержимое записать не успеете. Или вам места не хватит, чтобы это сделать. Или ещё чего-нибудь в этом же духе.
P.S. В Linux, кстати, этой проблемы нет. Ибо там всё сделано правильно: файл, который нельзя удалять нельзя ещё, при этом, и менять. Что разумно. А вот не давать возможность файл удалять, но давать возможность его менять… это бред.drWhy
13.09.2019 13:34Имела место попытка приспособить возможности имеющегося ПО для получения дополнительной функциональности, в целом удавшаяся.
Потерять один/несколько файлов обидно, но потерять соседнюю невиновную папку с проектом в тысячи файлов чуть обиднее. Конечно, бэкапы никто не отменял.
Получить желаемую функциональность всё же было возможно. Если не наследовать права для вновь созданных файлов, временный файл благополучно выполнил бы свою функцию и был бы удалён, а старый файл был бы усечён и переписан новым содержимым, не потеряв атрибутов. И с новым автором, которому можно было бы адресовать вопросы по правомочности замены старого документа. Но не в случае удаления старого файла.khim
13.09.2019 14:13Получить желаемую функциональность всё же было возможно.
Нет.
Если не наследовать права для вновь созданных файлов, временный файл благополучно выполнил бы свою функцию и был бы удалён, а старый файл был бы усечён и переписан новым содержимым, не потеряв атрибутов.
Ещё раз: нельзя атомарно «усечь и переписать новым содержимым, не потеряв аттрибутив» файл. В принципе. Никак. Microsoft аж даже целую новую файловую систему пытался учудить, чтобы решить эту проблему.
Потому что там мнооого проблем: размеры файла, вообще говоря, очень велики, запись его может занимать длительное время, так что обеспечение атомарности, мягко говоря, нетривиально.
А вот заменить метаданные (заменить один файл на другой) атомарно — вполне возможно, NTFS это умеет, как и большинство других современных файловых систем.
Потерять один/несколько файлов обидно, но потерять соседнюю невиновную папку с проектом в тысячи файлов чуть обиднее.
И то и другое прекрасно осуществляется даже после ваших изменений с помощью чудесной программу WipeFile (из комплекта Norton Utilities). Так что я понимаю обе стороны — и вас, пытающихся из имеющися средств накостылять что-то, и разработчиков, которые не хотят тратить время и силы на поддержку странной и редкой комбинации опций, которые реальной безопасности не дают всё равно.drWhy
13.09.2019 14:46Ну защита делалась не от целенаправленных действий, а от неосторожных действий коллег.
За ликбез спасибо.
sumanai
13.09.2019 17:42В Linux, кстати, этой проблемы нет. Ибо там всё сделано правильно: файл, который нельзя удалять нельзя ещё, при этом, и менять.
Там просто более бедная система прав.
А вот не давать возможность файл удалять, но давать возможность его менять… это бред.
Это просто дополнительная возможность.khim
13.09.2019 18:22
Что является не недостатоком, а достоинством. Потому что система прав — она, как бы, о безопасности. А безопасность — штука странная. Иногда лучше не иметь возможность вообще, чем иметь её и порождать странные последствия.В Linux, кстати, этой проблемы нет. Ибо там всё сделано правильно: файл, который нельзя удалять нельзя ещё, при этом, и менять.
Там просто более бедная система прав.
Вот только эта «дополнительная возможность» порождает проблемы, как мы видим.А вот не давать возможность файл удалять, но давать возможность его менять… это бред.
Это просто дополнительная возможность.
P.S. Собственно именно это стоит в основе решения разработчиков Chrome регулярно удалять фичи — несмотря на недовольство определённой части пользователей. Потому что бесконечная гибкость ведёт к бесконечному же количеству багов…sumanai
13.09.2019 19:09Иногда лучше не иметь возможность вообще, чем иметь её и порождать странные последствия.
Так может иногда?
Вот только эта «дополнительная возможность» порождает проблемы, как мы видим.
Не возможность сама по себе, а неверное её толкование и использование.
Собственно именно это стоит в основе решения разработчиков Chrome регулярно удалять фичи
Собственно потому я им и не пользуюсь. К сожалению, FF идёт туда же.
staticlab
13.09.2019 01:30Зато сейчас формулы написаны на Java
на Java?
drWhy
13.09.2019 11:29Недавно помогал редактировать формулы в чужой диссертации, сведённой из нескольких документов разных лет, написанных в разных версиях офиса. Для возможности редактирования формул старого MS Equations офис любезно предложил загрузить пакет, который оказался на основе Java. Триальная версия на 30 дней позволила отредактировать документ, но работала на двухъядерном ноутбуке с ssd и 8 ГБ ОЗУ ожидаемо неторопливо.
river-fall
12.09.2019 23:57+1win98 сваливалась в синий экран в любой удобный момент и было крайне желательно её переустанавливать время от времени. J3QQ4, ага
tundrawolf_kiba
13.09.2019 14:47Причем свалиться в BSOD или зависнуть она могла не только от проблем с железом или в ядре ОС, но просто от косяков допущенных в любой из запущенных на ней программ сторонних производителей.
dayofadmin
11.09.2019 09:46согласен с автором.
в winXP есть простая ветка «запретить создание очередности меню»
отключить «задержку появления меню»
и в принципе изменить приоритет отклика между приложениями.
я за Чистый простой быстрый стабильно работающий код.
Сама концепция накопления «кода от предыдущих операционных систем» навсякий случай играет в новых ОС — жуткую роль.
а если добавить СОФТ который ещё и «следит за пользователей и сливает данные» то комп какой бы он ни был мощный очень жутко лагает, что бесит
chnav
11.09.2019 09:54+1Погуглил AutomaticDestinations и первой же ссылкой
www.online-tech-tips.com/computer-tips/clear-recent-items-windows-jumplists
Чтобы избавиться от файлов истории для всех приложений в таскбаре одновременно (а не для конкретного приложения) и запретить их создание в будущем, нужно снять галочку в настройках таскбара. У меня было 73 файла, осталось два (возможно для проводника или ещё чего-то). Перезагрузка не потребовалась. В любом случае я никогда не пользовался этой историей плюс полезно для privacy.
Спасибо автору и переводчику за наводку!
tbl
11.09.2019 10:02Вспомнил похожую историю с утилитой grep на GNU/Linux, когда вызов с ключом -i/--ignore-case выполнялся в 50 раз медленнее, чем без этой опции на системах с UTF-8 локалью: для каждого токена из потока входных символов подсистемой gconv из библиотеки glibc выполнялось постоянное чтение файлов /usr/lib/locale/locale-archive и /usr/lib/gconv/gconv-modules.cache. Лечилось c помощью выставления локали в «C»:
LC_ALL=C grep -i ...
denisshabr
11.09.2019 10:28+1Кто-нибудь скажите тоже, почему простейшее приложение MagicTuneLite для управления яркостью Samsung мониторов, но написанное на .NET, запускается 5 секунд, на мощнейшем компьютере с SSD? Ну и та же претензия к nVidia panel.
VBKesha
11.09.2019 11:43Объяснение просто. Программисты пишут то что им скажут, так как им скажут. А те кто им говорят об этом далеко не всегда понимают что не так и почему.
И поэтому если сказали возьмешь код вот от того приложения и переделаешь его в управление яркостью, то так программист и сделает не заморачиваясь.
В итоге имеем монструозные приложения суть которых поменять 1-2 записи в реестре, и сделать стандартный вызов одной двух API функций.
JamboJet
11.09.2019 12:24Такая же претензия и к большинству «железных» приложений от gigabyte, msi, asus и так далее. Какой нибудь простейший монитор размером в 10 мегабайт запускается 5 секунд.
denisshabr
11.09.2019 14:21Это проблема вообще всех .NET приложений? Или бывают быстрозагружаемые .NET приложения?
Есть какие-то способы ускорить их загрузку, сделать прекомпиляцию с кэшем для уже готового приложения?Whuthering
11.09.2019 14:51Есть какие-то способы ускорить их загрузку, сделать прекомпиляцию с кэшем для уже готового приложения?
Есть Ngen.denisshabr
13.09.2019 11:46Не получается с помощью ngen 4 сделать что-то с MagicTuneLite.exe
Uninstalling assembly c:\Program Files\MagicTuneLite\MagicTuneLite.exe because of an error during compilation: Failed to load the runtime. (Exception from HRESULT: 0x80131700).
Failed to load the runtime. (Exception from HRESULT: 0x80131700)
oldschoolgeek
11.09.2019 17:53Или бывают быстрозагружаемые .NET приложения?
Бывают — тот же KeePass. Как верно написали ниже, существенное ускорение старта достигается при помощи штатной для .NET утилиты Ngen.
staticmain
11.09.2019 10:34Сегодня после обновления на 10ке перестал открываться пуск и панель справа экрана. Попробовал несколько рецептов, ничего не помогло. Благо хоть что-то можно сделать с ПКМ+пуск. А вы говорите файл читать.
Kanut
11.09.2019 10:38Возможно дело в KB4512941
staticmain
11.09.2019 10:40Возможно. Косвенно подтверждается тем, что он стал включаться раз в 10 дольше (с 10-15 секунд теперь минут 6).
ogost
11.09.2019 12:25То ли я такой привередливый стал, то ли в последние годы даже у гигантов стало нормальным из конечных пользователей делать бета-тестеров. Такое впечатление, что в погоне за рынком выкатывают сырые версии, лишь бы новый функционал побыстрее внедрить, а то что новая фишка ломает старые — так это ничего, потом пофиксим!
balamutang
11.09.2019 15:31Издержки распространения интернета. Раньше с вышедшим кривым софтом надо было бы снова напечатать партию дисков и разослать клиентам (и так с каждым фиксом), поэтому тестировали обычно до упора.
А сейчас тяп-ляп и в продакшн, потом обновления выкатим если надо. Все стало быстрее, но сырее.
AlxDr
11.09.2019 18:53Гиганты и не скрывают вовсе.
Зайдите в настройки обновления стандартной Винды и вчитайтесь в то, что там написано. По-умолчанию там стоит пункт «получатьнепросохшиесвежайшие обновки», опционально можно вообще в бета-программу войти. И есть типа «стабильная ветка» для организаций.
И штатно заморозить обновы на неопределённый срок нельзя.
По той же причине там неотключаемая телеметрия (по-умолчанию ещё и расширенная) — для тестировочных машин это абсолютно логично.
kasiopei
11.09.2019 13:03Это все мелочи. Вот то что драйвера стали весить сотни мегабайт…
А еще выключение. Я никаких программ не открывал, не обновлял. Система свежая. Почему выключение идет 20 секунд? Почему нельзя просто выключить питание? Почему у линукса так получается?andreymal
11.09.2019 13:08+1Почему у линукса так получается?
Мои убунты и арчлинуксы при выключении и на пару минут подвиснуть могут, ожидая завершения какой-нибудь службы
AnarchyMob
11.09.2019 23:23Почему выключение идет 20 секунд? Почему нельзя просто выключить питание? Почему у линукса так получается?
Это потому что на Windows, по дефолту, включена опция "быстрая загрузка", если её отключить, в дополнительных настройках электропиоания, компьютер будет выключаться мгновенно, но запуск, соответственно, будет происходить несколько дольше...
drWhy
11.09.2019 13:29+1Попробуйте отключить свап файл, и выключение станет заметно быстрее.
sumanai
11.09.2019 15:41Такое ощущение, что у него для безопасности включено зануливание этого файла подкачки.
AlxDr
12.09.2019 10:40Скорее, это работа т.н. «быстрой загрузки», когда система перед выключением скидывает на диск основную часть системной памяти, а при следующем включении загружает её оттуда обратно. Получается такая неполная гибернация (восстанавливается с диска только система, без пользовательского сеанса) и старт получается быстрее.
Ещё из-за этого бывают разные неожиданности и баги из серии «надо перезагрузить компьютер для завершения установки, но зачем, если вечером я его и так выключу», а на утро после включения оказывается, что система так и не перезагрузилась.
Ещё Винда куда нежнее сносит приложения, если они запущены на момент завершения работы. Тот же Дебиан, например, настолько быстро сносит их, что при выключении с открытым браузером Firefox там всегда (почти) будет упавшая сессия из-за того, что браузер не успел корректно завершиться.balamutang
12.09.2019 15:38помнится в ХР был один из твиков который как раз сокращал таймаут завершения приложений, с одной стороны ускорение работы, с другой — всякие подобные артефакты если при выходе из приложения что-то сохраняется
AlxDr
12.09.2019 15:55Да и сейчас можно допилить.
Штатно:
— Выключить «быструю загрузку» — не будет скидывать часть памяти на диск.
— Создать ярлык на «shutdown -t 00 -f» и выключать им, это ещё и помогает пропустить установку обновлений на выходе :)
Твики:
Computer\HKEY_CURRENT_USER\Control Panel\Desktop и там подкрутить WaitToKillAppTimeout и ещё кое-что, будет быстрее вышибать приложения.
Как по мне, польза всего этого сомнительна. Если приложение тормозит на выходе — оно что-то пытается сделать, на его взгляд нужное. Дело конкретно здесь не в «неправильной Винде», а в тормозящих приложениях, которые не могут нормально завершиться. Наверное тоже заняты открыванием какого-то файла сто тысяч раз подряд :)
Ackbar
12.09.2019 09:49Вы проверяли как себя ведет система если отключить файл подкачки? Наблюдал у себя такую картину: i7-8700k и 32 гб оперативной памяти. Приложения стабильно вылетали (особенно игры) из за того что система думала что всю оперативную память заняли (выделили под использование) но фактически было занята половина или меньше. Как это вылечить так и не понял.
drWhy
12.09.2019 10:16Игры играм рознь, конечно. Но да, проверял. Как-то даже на 16ГБ создал ramdisk в 8ГБ, куда копировал игрушку целиком. В итоге на уровень вываливался первым с заметным опережением (ssd были ещё не распространены).
Конечно, не в любой конфигурации отключение свапа приемлемо, но наблюдаемые варианты (включая довольно прожорливые CAD'ы) работают на ура годами.
Браузеры в последнее время стали аккуратнее в выделении памяти — раньше система с отключенным свапом могла просто перезагрузиться, не успев даже вывести сообщение о нехватке ОЗУ, сейчас просто вылетает браузер. Возможно, это заслуга менеджера памяти ОС.
И мониторить выделение памяти никто не запрещает (например, с помощью HWiNFO). Кое-что поддаётся настройке (политика выделения памяти), кое-что можно отключить (Prefetch, Superfetch), сэкономив ценную память от разбазаривания.
В целом свап — вынужденная мера, позволяющая впихнуть невпихуемое ценой дикой потери производительности и, особенно, отзывчивости.
AlxDr
12.09.2019 16:02Зависит от приложений.
Если отключить файл подкачки, некоторые вылетают и это не связано с реальным использованием памяти. С другими работает стабильно и быстро.
Никогда не видел смысла в отключении файла подкачки. Если в системе достаточно памяти, то его наличие ни на что не влияет, но позволяет избегать вот таких косяков. Жалко места на диске? Ну поставьте фиксированный размер в гиг.drWhy
12.09.2019 16:07Не в месте дело (кроме случаев с 32GB eMMC). Хотя ресурса ssd да, жалко.
При включённом файле подкачки реактивность системы резко теряется, система начинает напоминать старый москвич с плавным ходом из анекдота.AlxDr
12.09.2019 16:27При включённом файле подкачки реактивность системы резко теряется
Я такого по себе не замечал. Экспериментировал в прошлом, но разница была минимальна. Причём чем слабее компьютер, тем меньше заметно (при условии, что дефицита памяти нет).
Вообще, можете попробовать такой хитрый трюк.
У меня есть старенький нетбук с XP, 2ГБ оперативки и очень тормозным флеш-накопителем. Так вот я на нём создал RAM-диск на 500МБ оперативки и положил маленький файл подкачки туда — сугубо для совместимости с некоторыми такими капризными программами. Ну и кэши браузеров и ещё кое-какие временные папки туда перенаправил. С внутреннего накопителя подкачку убрал. Вот уж много лет полёт нормальный и работает ощутимо шустрее.
За применимость этого решения к 10-ке и играм не поручусь.drWhy
12.09.2019 16:36Ну свап то оказался в ОЗУ. Разница в производительности с hdd не один порядок.
AlxDr
12.09.2019 16:47Это единственный случай в моей практике, так как устройство больно уж специфическое :)
Что в офисных условиях, что на своих домашних машинках (правда, все они средненькие были по характеристикам, даже когда играл) я не замечал никакой практической разницы между отсутствием свопа и его наличием. А вот на стабильность это влияло. Когда памяти было заведомо достаточно, просто ставил его в 1ГБ, фиксированного размера и на самом быстром диске.
Может, в околотоповых конфигурациях это не так, но это странно.
uaggster
11.09.2019 16:12+1Да ладно вам, драйвера.
Тут уже вирусы по гигабайту весят!
… почти не утрирую:
FaTh3R: Trojan.Win32.Chifrax.d – 388 MB
БЕс слёз aka LazyFao: троянский слон
bash.im/quote/404875
prishelec
11.09.2019 13:18Была довольно странная ситуация с контекстным меню на wind 10 и у меня.
Я в свое время заметил, что при выборе пункта меню new (именно на рабочем столе), до отображения субменю проходило до 2-х секунд.
Также значительно дольше начали открываться приложения.
К примеру, для IDE Delphi вместо 11-12 секунд требовалось до 24.
Идентичная ситуация была и с eclipse.
В итоге моему терпению наступил предел, а любопытство начало «зашкаливать» и захотелось попытаться установить причину происхождения этой «беды».
Но самое загадочное было то, что весь этот «полтергейст» начинался после прохождения 80-85 секунд после загрузки ОС.
Сравнивал я и запущенные процессы/службы с двух компов «близнецов», но так и не «победил».
Все решилось, новой установкой ОС.HardWrMan
11.09.2019 14:56А у меня Win98 часто делала вот так:
Создать? - Создать!MTonly
11.09.2019 19:01Страдаю от этой проблемы Windows 10. В установленной на том же компьютере Windows 7 подменю «Создать» открывается мгновенно. В Windows 10 — через несколько секунд, причём, если это подменю единожды открыть, то в следующие разы может открываться уже быстро, хотя не всегда. Переустанавливать не хочется, да и нет гарантии, что внезапно не начнётся снова, особенно учитывая следующую проблему.
Другая проблема — после обновления Windows 10 до 1809 перестал срабатывать пункт «Открыть» контекстного меню ярлыков файлов и папок.
P.S. Core i7-3770T + 32 ГБ + SSD + GTX 650 Ti Boost.prishelec
11.09.2019 19:34Да, иногда после первого открытия, открывалось быстрее.
Core i7+ 8 ГБ + SSD + GTX 560.
Я переустановил, вот уже 9 месяцев – полет нормальный.
Забыл отметить: меню тормозило при открытии мышью. С помощью клавиатуры все было ГУД.MTonly
11.09.2019 19:42На всякий случай проверил: в моём случае тормозит и при открытии с помощью клавиатуры.
Oplkill
11.09.2019 23:01+1Подменю «New» прежде чем отобразиться, опрашивает все программы которые были установлены, которые добавляют свой подпункт. И некоторые из них либо не правильно удаляются(оставляя запись о том, что их пункт меню ещё активен) либо так плохо сделаны, что винда ждёт таймаута и после чего отображает уже это меню. Вот почему это лечится переустановкой виндой или чисткой реестра той ветки отвечающая за программы пункта New
prishelec
11.09.2019 23:39Так-то оно так, только вместе с этим совпали тормоза при открытии приложений.
Что меня и удивило, так это то, что все идентичное: ПО и ОС были на другом ПК.
Перед сносом ОС, удалил все обновления и установленное ПО, но баг остался. Самое интересно это что все проявлялось через 80-85 секунд после загрузки ОС. Все как по часам.
Причем новые процессы/службы в этот период времени не запускались и не завершались. Делал разные логи.
В итоге «природа» бага оказалась не выясненной.
MTonly
12.09.2019 03:45В Windows 7 этой проблемы нет при таком же наборе установленных программ (одному и тому же человеку закономерно нужны одни и те же программы вне зависимости от версии Windows).
ua30
11.09.2019 13:19-5Критиковать чужие, большие проекты всегда очень просто. Сделайте лучше.
Whuthering
11.09.2019 13:42+4А вот и бессмертный аргумент «Сперва добейся!» подъехал.
ua30
11.09.2019 17:07Мне всегда нравилось наблюдать за выходом новых противоугонных систем. И как умельцы, если не за часы, то за считанные дни находили в них уязвимые места и лазейки. Нравилось, потому что я в этом вообще ничего не понимал. Для меня это была магия.
Очевидный вопрос: почему не собрать десяток таких профи, да не сделать непробиваемую систему? Очевидный ответ: в любой системе можно найти слабые места и недочеты.
Так что не такие профи делают новые системы лучше. А общий рост доступности технических средств для взлома. И простой маркетинг: «мы лучше конкурентов».
Как для меня, есть более критичные вещи, чем обработка клика вызова контекстного меню в панели задач Проводника. Это может быть общая стабильность ОС. Скорость выполнения прикладных программ под ее управлением. Удобство разработки самих этих программ. Совместимость между версиями ПО. Хорошая поддержка разного железа.
Вот честно, для меня написанное совсем не убедительно. Нашли к чему придраться.
OnelaW
11.09.2019 15:02-1И? Да, критики не смогут создать аналогичное, не будут пробовать, не умеют (нужное подчеркнуть). Но разработчики же может как-то обрисовать для чего это было нужно?
Даже простой вопрос про перезагрузку после установки обновлений практически ни один разработчик не написал языком приближенным к пониманию рядовому обывателю зачем нужна перезагрузка? Про айтишников речи не идет.
Про обновления. зачем нужно пихать в единый пакет? И заплатки для критичных узлов и красивости.
Просто объяснить обычным человеческим языком зачем были нужны подобные действия.
Может это так трудно? И подобных вопросов куча. Например почему при огромных возможностях которые были заложены в длинный рог и в мелениум, майки превратили продукты в говно.
devpony
12.09.2019 13:20Автор за винду вообще-то деньги заплатил и, кажется, имеет право просить, чтобы часто выполняемые базовые действия выполнялись быстро и не тратили его рабочее время.
onground
11.09.2019 14:40За компьютером я работаю быстро, <...> Постоянной помехой на моём сверхмощном домашнем ноутбуке стало медленное закрывание окон на панели задач. <...> Я нажимаю правой клавишей на значок, жду, пока откроется меню, а затем выбираю «Закрыть окно».
Мамо!
Похоже автор вообще не осознает, что такое работать быстро. Иначе бы он не пользовался проводником. И мышкой старался бы пользоваться как можно реже.
Хотя тормоза виндового проводника уже такие, что даже расслабленные погонщики мышей начинают что-то подозревать. )mayorovp
11.09.2019 15:00-1На ноутбуке не так-то просто нажимать Alt+F4, если вы имели в виду именно этот способ. Хотя бы потому что в "аккорд" приходится добавлять клавишу Fn, которая ещё и находится чёрт знает где...
sumanai
11.09.2019 15:46+1Смотря какой ноутбук. Я в принципе не рассматривал к покупке устройства, у которого основные клавиши сделаны через сочетания. Я же не пианист или гитарист.
MTyrz
11.09.2019 15:47+1*Верно не для всех ноутбуков.
RH215
11.09.2019 17:25Ещё ни разу не видел ноутбука, где поведение функциональных клавиш бы не настраивалось.
DaemonGloom
12.09.2019 06:17Acer Aspire S7. Чтобы нажать F4 — вам надо нажать кнопки Fn и 4. Дополнительного ряда функциональных кнопок на нём просто нет.
K0styan
12.09.2019 18:19А у него нет режима Fn-lock, в котором функциональный ряд переключается в режим Fn1-Fn12 по умолчанию, а регулировки громкости-яркости начинают работать через Fn?
kudryavy
11.09.2019 15:54В Win10 работает Ctrl+W
А еще для любителей хоткеев есть vi и linux :)
Правда хоткеи и в средах разработки полезны.
Да и про IDDQD не стоит забывать
Что-то меня совсем на оффтоп потянулоGryphon88
11.09.2019 18:38В Win10 ещё работает закрытие по двойному клику на миниатюре в левом верхнем углу?
sumanai
12.09.2019 02:23Да.
Блин, не знал о такой фиче.vladkorotnev
12.09.2019 05:43Она тянется ещё с Win3.1, а то и раньше, когда отдельной кнопки для закрывания не было.
Fedorkov
12.09.2019 12:16В Хроме тоже долгое время была невидимая миниатюра, но относительно недавно её убрали.
andreyons
11.09.2019 15:56> добавлять клавишу Fn
Это всё настраивается. Или мультимедиа кнопки по Fn, или без неё.splitfire
12.09.2019 09:49Не всегда.
Через 3 дня после покупки пришлось унести в магазин ноутбук Леново, потому что перенастроить поведение Fn клавиш, оказалось невозможно. Это явно было сделано специально, потому что в более дорогих моделях в БИОСе опция была, а в дешевых не было.
Никаких объективных причин для такой ситуации нет, кроме той, что, по мнению Леново, нищеброды должны страдать.balamutang
12.09.2019 15:47Аналогично было с нeтбуком Packard Bell, захардкожено в биосе.
Только он был служебный и в магазин его уже никто не понес. Я проклял тот день когда сел за баранку этого пылесоса (жмешь Alt+F4, а у тебя выключается экран, ведь надо было жать Alt+F4+Fn).
onground
11.09.2019 16:19Если мы говорим про работать быстро, то все неудобные сочетания клавиш (если они «постоянная помеха») следует переназначить на удобные (а то и вообще не заменить скриптом). В винде с этим проблем почти нет. Autohotkey — великая вещь. Если вместо этого мы берем мышку, правую кнопку, ждем контекстное меню и тп — это уже не про быстро, это про не спеша. Попивая чай и почитывая Хабр.
kudryavy
11.09.2019 18:11А какую альтернативу вы можете предложить вместо панели задач? Переключиться на окно при помощи ALT+Tab*n и только потом закрыть?
Правда, интересно. Ведь насколько я понял, автор закрывает фоновые окна, а не текущее.
Andrey_Rogovsky
11.09.2019 15:48Подозреваю что код написан методом копипаста-стайл одним из индусов, который не шарит в айти, но был вывезен в США своим родственником.
Впрочем, мы ничего не можем сделать MS за его навоз, который оно скармливает под видом ОС, по этому такой код будет продолжаться.
Вот если бы какой-то айтишный суд оштрафовал MS на 25% капитала за такие мансы — то MS сразу бы перестала аутсорсить кодерам, которые работают по пять баксов в час.
Akon32
11.09.2019 16:39-2Почему?
1) Всем пофиг. 750мс — не так уж и медленно. Чтобы спозиционировать мышь на кнопке и сделать щелчок, согласно методике GOMS, уходит около 1 секунды. Секундой меньше, секундой больше. Можно показать пользователю весёленькую (на самом деле нет) анимацию отображения меню.
2) Этого не было в ТЗ. Функции в коде были написаны с лучшими намерениями и, возможно, даже оптимизированы, но затем (лет через 5) появился код, вызывающий эти функции, а еще лет через 5 код оброс тысячами вызовов, и получилось то, что есть. Вместе с пунктом 1, не факт, что ТЗ на оптимизацию появится. Возможно, даже никому не приходило в голову это оптимизировать.
При оптимизации кода в большинстве случаев целесообразно применять правило "преждевременная оптимизация — корень всех зол", а также имеет смысл оптимизировать то, что больше всего тормозит. Вероятно, находились более приоритетные задачи. Невозможно оптимизировать всё.
DrPass
11.09.2019 16:53+5Под «преждевременной оптимизацией» подразумевается «пытаться оптимизировать то, что и так нормально работает». А исправить откровенно дурной код, это вообще не «оптимизация», а «нормальный подход к работе».
Akon32
11.09.2019 22:07Я описал один из вариантов, как при "нормальном подходе к работе" может получиться ужасный в целом результат. Многолетние наслоения кода творят "чудеса", и приходится их переписывать по-нормальному, когда эти "чудеса" начинают всем мешать. И мешать они могут лишь в специфическом окружении, а не у команды разработчиков/тестировщиков, которая может всё сделать правильно (судя по имеющейся у них информации), и вообще остаться в неведении насчёт бага, который проявился лишь через N лет после написания кода.
В каком-то смысле, это даже прекрасно, что 100000 чтений из файла заняли всего 750мс, а не, скажем, 1000 секунд (это значит, ReadFile() неплохо оптимизирован!). Но именно поэтому баг некритичен и его не исправляют.DrPass
11.09.2019 23:58+1Но именно поэтому баг некритичен и его не исправляют.
Нет, не поэтому. Просто потому, что в той команде разработчиков предпочитают выкатывать на продакшен сырой код, а потом платить за весь цикл разработки фикса, тестирования фикса, доставки фикса, вместо того, чтобы сразу чуть больше внимания уделить его качеству. Всякие там сложные схемы, как такое могло произойти в результате многолетнего стечения обстоятельств надуманы. Это не единичные случаи, там сейчас везде подобные «стечения обстоятельств».Wesha
12.09.2019 08:10+1Для таких разработчиков даже фирменное лого естьAkon32
12.09.2019 11:30+2чуть больше внимания уделить его качеству.
Мне кажется, вы путаете качество с идеалом. Насколько я помню, в определениях качества нет требования мгновенной работы, а есть требования к выполнению задач пользователя в определённый срок и с определённой вероятностью успеха. Идеального ПО не бывает. Мне трудно представить компанию, занимающуюся коммерческой разработкой и выпускающую идеальный код. Все останавливаются на "Работает (выполняет задачи пользователя в срок) — и ладно. Не работает — перепишем". И я не вижу причин поступать иначе, кроме как самоцели написания идеального кода.
А вы видите другие причины?DrPass
12.09.2019 12:45а есть требования к выполнению задач пользователя в определённый срок и с определённой вероятностью успеха.
Нет, как раз наоборот. Уложиться формально в норматив спецификации, не заморачиваясь другими вопросами, это не качество, а как раз вышеупомянутый «хуяк-хуяк, и в продакшен». Качество — это соблюдение общепринятых правил оформления кода и построения архитектуры, это когда дизайнеры придерживаются единой концепции построения UI, и когда тестировщики не выпускают наружу релизы с критичными багами, просто потому, что менеджер назначил символическую дату релиза, которую ну никак нельзя сдвинуть, т.к. система мотивации в компании такая, что премию не дадут.
Вот это — качество. И что самое интересное, это в среднем +10% к срокам разработки, которые решают 90% её проблем.
А вы видите другие причины?
Например, удержание доли рынка. Майкрософт сейчас такое может себе позволить. В Windows NT 4 не было заметных невооруженному взгляду багов, хотя там было огромное количество изменений после NT 3.5, да и в каждом сервис-паке их было куда больше, чем в нынешних полугодовых релизах десятки. А разработчиков было в разы меньше. Но тогда им в спину вовсю дышали Unix'ы, и надо было поддерживать культуру разработки. А сейчас этого нет.
drWhy
12.09.2019 12:50Идеального не бывает ничего. По почти идеальное ПО бывает. Дональд Кнут, например, стремится к созданию именно такого ПО, старательно отлаживая свои продукты, привлекая к процессу всех желающих и оплачивая их труд.
Способ нумерации версий ПО как бы намекает на конечность и сходимость процесса отладки: в качестве номеров версий выбраны константы, в частности, pi и e, версии уточняются в последних знаках. Т.е. функциональность и стабильность ПО достигла зрелости и не предполагает появления мажорных версий.
Конечно, ожидать от грандов индустрии подобной дотошности в производстве ПО опрометчиво.Akon32
12.09.2019 13:14Т.е. функциональность и стабильность ПО достигла зрелости и не предполагает появления мажорных версий.
Странный подход. По-моему, любое ПО когда-нибудь придётся переписывать, т.к. на протяжении лет меняется окружение, пользователи хотят решения новых задач, и рано или поздно и вся архитектура, и весь UI оказываются неудобными, устаревшими и неповоротливыми.
drWhy
12.09.2019 13:28Важно, что ПО продолжает выполнять ожидаемые функции.
Меняется окружение, появляются новые запросы — выбираем новую константу и пишем новое приложение.
Неповоротлива в контексте статьи ОС, отвлекающая ресурсы оборудования на действия, о которых её даже не просили.
j_wayne
11.09.2019 18:32Фраза про оптимизацию, к сожалению, часто вырывается из контекста.
Полная фраза: «We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.»
Сколько проблем с производительностью получили индульгенцию из-за этой фразы? (ритор. вопрос)
Критический ли лаг 750мс? Зависит от. Я бы лично предпочел, чтобы UI не лагал так, если это несложно исправить.Akon32
11.09.2019 22:42Естественно, я тоже предпочитаю, чтобы всё летало, а не лагало. Но считать лаг 750мс критическим, когда только на позиционирование мыши требуется около 1000мс, — это всё-таки ближе к перфекционизму. Вряд ли работа сколь-либо существенно ускорится, если отклик будет мгновенным (это мои предположения, конечно).
We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%
При оптимизации кода в большинстве случаев целесообразно применять правило "преждевременная оптимизация — корень всех зол", а также имеет смысл оптимизировать то, что больше всего тормозит.Разве моя фраза противоречит вашей цитате?
Сам не очень-то люблю это высказывание, но в контексте статьи речь идёт о том, что разработчики должны были оптимизировать код, как-то предугадав, что у автора он начнёт тормозить (что могло быть совершенно неочевидно!) Полагаю, на момент разработки всё работало быстро (либо достаточно быстро), поэтому никто не стал заранее оптимизировать именно этот участок.MTyrz
12.09.2019 19:21только на позиционирование мыши требуется около 1000мс
Одна секунда — это чертова дохренища времени.
Произнесите медленно слово «четырнадцать» — вот это примерно одна секунда. Я, считая себя очень медленным (и в частности по этой причине не любящий играть в экшны) за это время успеваю позиционировать мышь на вашем нике, открыть ваш профиль в новой вкладке и перейти на нее.
Я не знаю, какую методику и на какой выборке использовала эта самая помянутая вами GOMS — да честно говоря, и знать не хочу. Подозреваю, что в выборку попали либо новички, которые мышку держат двумя руками для большей уверенности, либо люди с выраженными нарушениями функциональности опорно-двигательного аппарата. И те и другие, впрочем, от ускорения отрисовки контекстного меню страдать не будут.
Короче говоря, у вас исходные данные неверны. Секунда — это дофига, и средний пользователь позиционирует мышь в среднем в разы быстрее.Akon32
13.09.2019 10:57Возможно, эти данные из 80х-90х, когда оптических мышек не было. И там что-то вроде 1.1с даже, но это среднее время на разных пользователях. Для сравнения, кнопка на клавиатуре там оценивается в 0.1с.
Попробуйте замерить время 10 кликов по произвольным кнопкам в разных частях экрана. У меня получается 12-15 секунд.
Кстати, при выборе пункта меню, согласно той методике, пользователь только на обдумывание тратит примерно логарифмическое от числа пунктов время (там какая-то более сложная формула, типа "логарифм + константа").
kudryavy
11.09.2019 19:38Вы как-то странно представляете процесс ожидания.
Процесс ожидания начинается не с позиционирования курсора мышки, а с клика клавишей мыши. Клик — ждем реакции — интерфейс отреагировал. И на мощных машинах отклик интерфейса обычно заметно короче 750 мс. Раздражает именно это отличие в отклике. Везде быстро, а тут медленно.Akon32
11.09.2019 22:18В моём представлении, пользователь запускает задачи гораздо более долговременные, чем требуется на тормоза интерфейса в данном случае, поэтому 750мс здесь — относительно небольшая задержка. Если бы пользователь только и делал, что кликал мышью по разным кнопкам, он бы тратил 1000мс на позиционирование и клик, и 750мс на тормоза, т.е. около 40% на тормоза максимум. Если кроме кликов и тормозов время тратится на что-то полезное (да хотя бы набор текста или копирование файлов), на тормоза будет тратиться ещё меньший процент времени.
drWhy
12.09.2019 09:49Речь всё же о ста тысячах лишних непродуктивных вызовов.
Akon32
12.09.2019 11:50Уверяю вас, компьютер, способный выполнять миллиарды инструкций в секунду, делает на порядки больше непродуктивных вещей. Процессор офисного компьютера обычно спит 99% времени! Для ряда задач пользователя не нужна ни многозадачность, ни механизм виртуальной памяти, ни хитрые кэши, но они есть и отъедают свои микросекунды и ватты, даже если в конкретной задаче не нужны. Вклад тех 100000 вызовов в общую непродуктивность невелик. В идеале, конечно, такого быть не должно, но на практике — чаще всего проблема некритична.
drWhy
12.09.2019 13:09И пусть процессор спит, на то ему и разработали различные состояния сна. Это пользователя процессор, и его же ssd, и контроллер sata в чипсете тоже, и не нужно их насиловать операциями, которые пользователю не нужны. Ватты, кстати, тоже пользователя. Про отвал моста слышали? Кто виноват, котики пользователя с ютуба или те самые лишние непродуктивные дисковые операции, не позволяющие мосту спать/остывать?
Загадить все уровни кешей, как и нецелево использовать механизм виртуальной памяти система способна легко.
Пользователям зачастую приходится по несколько минут ждать загрузки системы, ожидать переключения между программами из-за недостатка физической озу, не говоря уже о прочих обновлениях. Хуже всего, что большинство пользователей считают это нормальным.Akon32
12.09.2019 13:37И пусть процессор спит, на то ему и разработали различные состояния сна.
Но тогда пусть и ReadFile() вызывается 100500 раз в секунду, на то её и оптимизировали. Доступ к диску кэширован, а DRAM стерпит. Да, потраченное впустую время и потраченная впустую энергия, но их доля в данном случае мала, чтобы существенно мешать работе. Примерно как доля затрат на виртуальную память, когда она есть, но не нужна.
Про отвал моста слышали?
Первый раз слышу. Но это аппаратная проблема. Нормальные системы проектируют так, что никакой говнокод не способен их убить. Иначе система умрёт и от хорошего кода, если ему вдруг потребуется считать 100500 файлов.
drWhy
12.09.2019 13:59Дисковый кеш это хорошо, но, как и любой — если им не злоупотреблять. Если одновременно несколько приложений и ОС конкурируют за право использовать кеш, от него будет скорее вред, т.к. на его заполнение тоже нужно время. Тогда нужно вводить приоритеты — это приложение работает с важной (для пользователя БД), ему приоритет. А это ОС хочет своей статистикой позаниматься — пусть подождёт.
ОЗУ много не бывает.
А вот затраты на свап огромны. Это лишние время, энергия, нагрев, износ.
Нормальные да, проектируют. Сервера, например. А ноутбуки часто умирают именно из-за перегрева моста, которому ни нормального охлаждения не достаётся, ни встроенного механизма защиты (как троттлинг у процессора) нету. Есть датчик температуры, да кто ж его мониторит. В настольных материнских платах хотя бы доступнее пользователю терможвачку под радиатором сменить на термопасту.
kudryavy
12.09.2019 11:39Разве речь о том, насколько эта задержка мешает работе в реальности?
Речь о том, насколько эта задержка раздражает на фоне мгновенного отклика интерфейса в других случаях. И о том, насколько оправдана эта задержка: очень похоже на точку зрения "проще купить мощное железо, чем оптимизировать работу софта". Только тормоза видны на мощном железеsumanai
12.09.2019 14:15мгновенного отклика интерфейса в других случаях
Это в случае KolibriOS в виртуалке? Ибо у десятки в принципе нет мгновенных реакций.
popov654
13.09.2019 01:40То есть 40 процентов времени в среднем сверху при работе — для вас ерунда?.. Ничего себе.
У меня, кстати, на свежеустановленной Windows 10 главное меню открывается 900-1000 мс, и это ещё дольше, чем у автора статьи контекстное. Тоже очень раздражает. Да, у меня кастомная сборка, там отключена часть служб — но даже отключение служб не должно по идее приводить к таким лагам базового интерфейса. Да и на официальных сборках это же меню открывалось не сильно быстрее, кажется.Akon32
13.09.2019 11:1140% не в среднем, а максимум. Если работа заключается не в чистом кликании мышью, процент будет гораздо меньше, может, процентов 5 (это если пользователь вызывает меню каждые 14 секунд). Не думаю, что эти потери больше потерь времени на мелкие отвлечения от работы, чтобы, например, оторвать взгляд от экрана. Сколько раз пользователь вызывает это меню за день? Чаепития или перекуры, если вдруг случатся, наверно переплюнут эти потери от тормозов.
khim
13.09.2019 13:03Чаепития или перекуры, если вдруг случатся, наверно переплюнут эти потери от тормозов.
А причём тут чаевития и перекуры? Они учитываются работодателем, когда он график работ рассчитывает.
А 5% рабочего времени — это много. Даже если зарплата $1000 в месяц — это $50 на человека. За год набегает $600. Вполне себе неплохая сумма, которую можно попробовать стрясти через суд.Akon32
13.09.2019 13:355% — моя неточная оценка. Можете попробовать более точно подсчитать время, подсчитав число открытий того меню за день и умножив количество на 700мс.
Стрясти через суд не получится, ибо "software is provided as is". Без этой фразы в стоимость ПО была бы включена стоимость страховки от постоянных косяков, которые неизбежны.khim
13.09.2019 14:22Стрясти через суд не получится, ибо «software is provided as is».
Ну понятно, что вначале нужно изменить законы, чтобы эта фраза потеряла силу. Ну или хотя бы не распространялась на платные программы. Если программа ничего не стоит, то я, в общем, понимаю, почему страховка может не быть включена в стоимость. Но почему пакет молока за доллар включает такую страховку, а программа во многие тысячи долларов — нет, я лично понять не могу.
Без этой фразы в стоимость ПО была бы включена стоимость страховки от постоянных косяков, которые неизбежны.
Ну и было бы неплохо. Потому как если цена — это компенсация за разработку, то непонятно с какого перепугу один и тот же код может продаваться за $20 (Windows Home) и за $6000 (Windows Server).Akon32
13.09.2019 15:34+1Ну понятно, что вначале нужно изменить законы, чтобы эта фраза потеряла силу. Ну или хотя бы не распространялась на платные программы.
Вы когда-нибудь создавали программы, в которых надёжно (математически) доказано отсутствие багов? Создание такого ПО стоит на порядки больше, чем того, что есть. А в том, что есть, всегда есть баги. Это следствие сложности ПО, а не особого разгильдяйства разработчиков.
Но почему пакет молока за доллар включает такую страховку
Потому, что не каждый пакет молока несёт в себе опасность. Пастеризация гораздо более проста и эффективна, чем отладка кода. Если в молоке осталось небольшое количество бактерий, ваш иммунитет с ними справится или они сами погибнут и вам не навредят. Синтез молока отлажен миллионами лет эволюции, как и ваш иммунитет. Но на разработку и тестирование ПО нет столько времени. Если в ПО есть баги (а они есть, ибо разрабатывать сложно), они не могут сами исчезнуть. ПО запускается много раз, и за тысячи или миллионы запусков кода в разных условиях вы столкнётесь с ошибками.
(про страховку)
Ну и было бы неплохо.А считать не пробовали? Допустим, разработка ПО стоит М долларов, и вы можете потерять из-за косяков в ПО N долларов, поэтому хотите страховую сумму N. ПО без багов не бывает, поэтому вы найдёте косяк с вероятностью в 100%, и потребуете свои N долларов. Поэтому страховка будет стоить как минимум N долларов (плюс издержки страховой фирмы), а в сумме вы заплатите минимум M+N.
Кстати, обсуждаемый косяк багом не является, т.к., скорее всего, никак не влияет на решение задач пользователя, но вы, наверно, истребовали бы страховку или засудили бы производителя ПО. Поэтому никто вам программу не продаст, будете считать на счётах и звонить через телефонисток.
за $20 (Windows Home) и за $6000 (Windows Server)
В них есть различные компоненты, что очевидно всем, кто использовал Windows Server.
tundrawolf_kiba
13.09.2019 17:24Вы когда-нибудь создавали программы, в которых надёжно (математически) доказано отсутствие багов? Создание такого ПО стоит на порядки больше, чем того, что есть.
Ну и более того — такой тип статического тестирования далеко не всегда применим.
khim
13.09.2019 18:10Вы когда-нибудь создавали программы, в которых надёжно (математически) доказано отсутствие багов?
Создавал.
Создание такого ПО стоит на порядки больше, чем того, что есть
Может и на два, да.
А в том, что есть, всегда есть баги. Это следствие сложности ПО, а не особого разгильдяйства разработчиков.
Причём тут всё это? Да, и в процессорах и в программах и во всех других вещах есть баги. Пока они не вызывают финансового ущерба — от них ни горячо, ни холодно.
Но когда серьёзный неисправимый баг находится в процессоре — это приводит к серьёзным финансовым последствиям, а если подобная же ошибка оказывается в ПО — то это, в лучшем случае, кончается публикацией странички на сайте производителя.
Но на разработку и тестирование ПО нет столько времени.
Ну миллионов лет на разратоку и тестирование действительно нет, но потратить на это дело в 2-3-10 раз больше, чем тратится сейчас никто, в сущности, не мешает.
Потому что большая часть ПО, которое создаётся сегодня никаких реальных проблем не решает, а, в лучшем случае, удовлетворяет чьи-то амбиции.
ПО запускается много раз, и за тысячи или миллионы запусков кода в разных условиях вы столкнётесь с ошибками.
И пока их немного — страховая компания их вполне оплатит.
ПО без багов не бывает, поэтому вы найдёте косяк с вероятностью в 100%, и потребуете свои N долларов.
А вот это — вряд ли. Никого не волнуют абстрактные баги. Так же как и никого не волнует наличие бактерий в молоке если вас не «несёт», так и наличие багов, которые никак не проявляются — вас тоже не волнует.
И сложность этих компонентов отличается на два с лишним порядка? Не смешите мои тапочки.за $20 (Windows Home) и за $6000 (Windows Server)
В них есть различные компоненты, что очевидно всем, кто использовал Windows Server.
Разница в цене, очевидно, исходит из того, что с помощью одного из этих продуктов я буду писать письмо любимой бабушке, а с помощью другого — зарабатывать деньги… вот только почему при этом туда не включена страховка за то, что я этих денег, возможно, заработать и не смогу? Из-за недоработок вот в этом вот пакете ПО ценой в неплохую месячную зарплату работника?
Поэтому никто вам программу не продаст, будете считать на счётах и звонить через телефонисток.
Вот только не надо FUD разводить. Конечно если выбор у производителей ПО будет — «развод лохов на деньги» или «честное выполнение своих обещаний», то «развод лохов» всегда выигрывает. Но для того и существуют законы, чтобы этого не происходило.
Если производителям запретить брать деньги за своё ПО без соотвествующего страхования — то они предпримут все необходимые действия для того, чтобы ошибок не было.
Это, в общем, не так и сложно: 99% кода в создаваемом сегодня ПО — это пердосвистелки, которые, по большому счёту, для функционирования ПО не нужны вообще. Если они будут выпилены и создающие их разработчики займутся поиском и исправлением ошибок — то всем будет лучше.
Почему? Да потому что чем дальше в лес, тем больше ошибки в ПО — это не о потерянных деньгах, а человеческих жизнях.
Если IT-индустрия не решит эту проблему сама, то, рано или поздно, государство всё равно вмешается — и вот тогда робкие предложения о том, чтобы всего-навсего предоставлять страховку нам покажутся цветочками.
Ну вот так же, как с порядком в Интернете: не захотели обеспечить порядок «по хорошему» — получите решение «по плохому» (и не надо думать, что «законом Яровой» всё ограничится).qw1
13.09.2019 21:06Хотите ПО с гарантиями — никто лично вам не мешает профинансировать такую разработку. А текущие пользователи даже в 2 раз дороже не захотят платить, не говоря уже о 10-100. Зачем решать за всех.
Ну вот так же, как с порядком в Интернете: не захотели обеспечить порядок «по хорошему» — получите решение «по плохому» (и не надо думать, что «законом Яровой» всё ограничится).
Наглядно видно, что вся эта ерунда не работает. Террористы так же спокойно координируют свои действия хоть через СМС, обычные юзеры качают с заблокированного рутрекера и т.п. Зачем реально были приняты регулирующие интернет законы — чтобы попилить бюджет (у нас) и пощипать заокеанские корпорации (в Европе).khim
14.09.2019 00:21Зачем решать за всех.
По той же причине, по которой «за всех» решают что можно называть молоком (а что — «молочным продуктом»), заставляют писать цену за килограмм (в Европе, по крайней мере) и прочее.
А текущие пользователи даже в 2 раз дороже не захотят платить, не говоря уже о 10-100.
Дык они и дома будут покупать из песка, если им волю дать. А потом плакать, когда они развалятся и родственники только нос и большой палец из-под руин смогут вытащить.
Террористы так же спокойно координируют свои действия хоть через СМС, обычные юзеры качают с заблокированного рутрекера и т.п.
Насчёт террористов не знаю, а рутрекер властям зачем? Сделать так, чтобы можно было сказать «мы сделали всё возможное», когда зарубежные праообладатели будут их «доставать» — это одно, а пытаться тратить время и силы на то, на что им, в принципе, наплевать — совсем другое.
Наглядно видно, что вся эта ерунда не работает.
Когда надо — работает. И Telegram не спасает.qw1
14.09.2019 09:23У ограничительных законодательных инициатив большая низовая поддержка.
С трудом можно представить, что вы соберёте критичную массу пользователей, требующих ответственный подход к разработке программ. Но этого мало. Нужно, чтобы к движению присоединялись ещё и программисты. Типа такие «Я написал тетрис без багов. Но вы можете подать на меня в суд и отсудить последнюю квартиру, если моя программа вам причинит ущерб, я ведь активист движения ответственного программирования, поэтому буду только `за`».
datacompboy
Ответа на вопрос поста нет =))
Может, всё же в данном случае это «почему» а скорее в формате «Ну зачем?»
viklequick
Пост — вообще скрытая реклама far manager / total commander :-)
vis_inet
Да ну — кроме них есть ещё куча разных файловых менеджеров )
drWhy
Но от других Far отличается отсутствием графики, т.е. быстрее отображает большое количество файлов, потребляя при этом меньше ресурсов. Работает в Nano Server.
vis_inet
Ещё ZTreeWin, например, тоже не графический и быстрый и ресурсосберегающий.
Arris
Вы шутите, наверное?
В полноэкранном режиме — возможно, а в окне — оно под капотом всё равно графика, хоть и выглядит как эмуляция консольного режима.
Я чего-то не понимаю в сортах винд, наверное? :(
drWhy
Отнюдь. Скопировано из оконного фара. К сожалению, выбрать шрифт Courier нельзя.
г====== D:\temp =====¬
¦x Name ¦ Name ¦
¦… ¦ ¦
¦---------+----------¦
¦. Up 12.09.19 16¦
L 0 (0/0) === 147 G =-
Whuthering
Комментатор выше говорит о том, что в полноэкранном режиме (по крайней мере в старых виндах, в NT-ветке наверное уже нет, не проверял) оно работает в чисто-текстовом режиме (80x25 или 80x40 например), то есть видеоадаптер переключается реально в text mode и картинка рисуется символами знакогенератора, а если даже консольное приложение типа Far запущено в окне, то текстовый режим _эмулируется_, и по факту идет рисование символов операционной системой (эмулятором терминала) в графическом буфере.
drWhy
Да, консоль эмулируется, но под неё используется один раз отрисованный шрифт, нет большого количества уникальных иконок. В итоге затраты на отображение папки с большим количеством файлов существенно меньше.
Arris
Именно так, спасибо за формулировку.
vlivyur
Это ж консоль, один в один cmd. Оно и выводит туда обычные символы. Оно, конечно, не текстовый режим монитора, но и не совсем графический.
Arris
Если не текстовый и не графический — то какой? :)
Под капотом оно все равно же выводит в графику.
EvgeniyNuAfanasievich
Гипертекстовый же!
iingvaar
Богат русский язык! В английском оба вопроса звучали бы как «Why?»
Mana_Banana
А «For what?», «What's the point?» и как минимум еще 2 вопроса вертящихся на языке.
aakolov
Я бы даже сказал 'what for' — так экспрессии больше.
HardWrMan
И, скорее всего, правильнее, если понаблюдать за использованием данной конструкции носителями языка в соответствующих ситуациях. Например, тот же «good for» — аналогичен по конструкции.
site6893
… это он незнания английского.
x67
Вопрос риторический, потому и нет ответа)
maxzhurkin
Почему — корректный вопрос, зачем — нет, IMHO