ShellIconOverlayIdentifiers - почему так мало?

В этот момент все знают, что существует ограничение на число ShellIconOverlayIdentifiers (из MSDN):

Количество различных обработчиков оверлей на иконок, поддерживаемых системой, ограничено объемом пространства, доступного для окошек значков в списке образов системы. В настоящее время имеется пятнадцать слотов, предназначенных для оверлей значков, некоторые из которых зарезервированы системой. По этой причине обработчики наложения значков должны быть реализованы только в том случае, если нет удовлетворительных альтернатив

Я могу понять 15 оверлейных ограничений в Windows 95. Но в среде, где есть гигабайты RAM, многочисленные ядра и графические процессоры, есть ли какая-то техническая причина для такого небольшого числа в современной операционной системе?

И почему это значение не настраивается?

Прежде чем дать ответ "производительность", рассмотрите: Windows позволяет настроить такую ​​конфигурацию, что вы можете убить производительность... зачем выбирать эту проблему?

Ответ 1

Если кто-то не работает в команде Windows Shell, я сомневаюсь, что вы получите ответ, который действительно устраняет технические ограничения и влияет на выбор дизайна. Но я попробую...

Я предполагаю, что никаких технических ограничений нет или, по крайней мере, сейчас их нет. По-видимому, реальная причина заключается в том, что никто никогда не занимал время, чтобы сесть и обновить код, дизайн и спецификацию, чтобы снять это ограничение. Возможности не реализованы по умолчанию, и только потому, что вычислительная среда изменилась за последние несколько лет, не означает, что кто-то сел и переписал Windows, чтобы в полной мере воспользоваться всеми этими изменениями.

Вы также должны учитывать, что это более чем вероятно сознательный выбор дизайна, а не наложенное ограничение. Раймонд Чен (который действительно работает в команде оболочки) опубликовал запись в блоге, отвечая на волнение о Windows 7, удалив оверлей "совместного использования". Он делает убедительный аргумент, что наложение значков действительно не является желательным способом отображения информации (помимо того, что система ограничена 15) [выделено мной]:

Вообще говоря, наложения не являются хороший способ представления информации потому что может быть только одно наложение на значок, и существует ограничение в 15 наложения в ImageList. Если есть два или более оверлей, которые применяются к вещь, тогда один победит, а остальные потеряет, и в этот момент значение наложение как способ определения какие свойства относятся к элементу уменьшается, поскольку единственный способ быть убедитесь, что свойство отсутствует когда вы не видите наложения вообще. (Если вы видите некоторые другие наложения, вы не можете скажите, потому что имущества отсутствует или потому, что другой наложение отображается вместо ваша.)

Мне кажется разумным, что дополнительный беспорядок, добавленный в оболочку, просто не стоит в большинстве случаев в реальном мире. Команда Windows Shell явно достигла такого же результата и сократила накладку "совместного использования". Raymond прямое объяснение:

Учитывая изменения в том, как люди используют компьютеров, информация о совместном использовании становясь все более и более государство. Когда вы настраиваете HomeGroup, в значительной степени все будет общий. Чтобы удалить визуальный беспорядок, информация была перенесена в Панель сведений.

И я знаю, что вы специально попросили не упоминать о производительности, но Windows действительно пытается не дать вам стрелять в ногу. Пользователи требуют отклика в оболочке, а оверлейные значки могут мешать это. В качестве еще одного свидетельства того, что они не являются приоритетом, другое сообщение в блоге того же Раймонда Чена наказывает:

Другой пример приложений, имеющих появился эгоистичный взгляд на спектакль от компании, разрабатывающей икону обработчик наложения. Оболочка лечит наложение вычислений как низкоприоритетное, поскольку более важно получать значки на экране, чтобы пользователь могут начать делать все, что они есть хотел делать. Украшения может прийти позже. Эта компания хотела знать, есть ли способ, которым они могли бы улучшить их работу и получить их наложение на экран до появления значка, демонстрируя феноменально эгоистичный интерпретация "производительности".

Ответ 2

Отличный ответ на практические вопросы Коди. Что касается того, почему 15, а не какое-то другое число, предел запекается в ImageList сам.

Ответ 3

Это все очень хорошо и хорошо, как объяснил Коди Грей, но, откровенно говоря, он довольно невообразимый и, как сообщается за кулисами, немного расстроен

В 2015 году и с Windows 10, безусловно, может быть и должна быть лучшая способность, поскольку я отметил около тридцати оверлеев, присутствующих и должен был расставить приоритеты, которые мне больше всего хотелось увидеть, и это не то, что вы хотите, чтобы большинство людей беспокоились о вообще. Также я вижу агрессивных поставщиков, таких как Box over-competition, чтобы попытаться расставить приоритеты, и это никогда не пойдет в любом месте.

Здесь есть возможность. Что делать, если многократные наложенные значки имеют общий индикатор наложения; маленькую прямоугольную матрицу с несколькими цветами, например, кнопку Google Chrome Apps? Одинаковое наложение просто отобразит наложение из длинного списка.

Затем, когда указатель мыши встречает значок, небольшое окно всплывающего окна собирает все варианты значков для просмотра (при небольшом значке или немного больше). Каждый наложенный значок, в свою очередь, объявляет всплывающей подсказкой, что это такое, когда вы наводите указатель мыши.

Теперь вы можете иметь все наложения значков, которые вам нужны, для состояния в разных облаках, для указаний хранилища, как для инструментов Tortoise, и так далее.