Вопрос или проблема
Я сталкиваюсь с этой проблемой уже некоторое время. У меня Windows 10 v1909. Каждый раз, когда открыто окно Проводника, память (здесь указана в приватных байтах – я знаю, что это не отражает все аспекты использования памяти процессом), используемая процессом, медленно поглощает всю память моей системы. В некоторых крайних случаях она может занять целых 7 ГБ памяти моего ПК, и чтобы всё снова заработало, мне нужно его завершить.
Вот что я пробовал до сих пор:
- Запуск
sfc /scannow
: ничего не повреждено. - Отключение всех сетевых дисков: ничего не изменилось. (Ранее это было для меня проблемой, потому что я мапил несколько общих папок на эфемерных системах и, когда они были удалены, Проводник зависал и замораживал систему)
- Остановка и удаление подозрительных приложений, которые я установил недавно: проблема всё еще сохраняется. У меня установлены Google Drive File Stream и Winaero Tweaker. Я подозревал, что диск GDFS может вызывать проблемы, но, как оказалось, это не так.
- Попытался очистить рабочие наборы с помощью RAMMAP от Sysinternals. Это оказалось полезным, так как использование памяти Проводником, по-видимому, “очистилось”, но вскоре оно снова начинало потреблять память, если окно оставалось открытым.
Вот что я наблюдал:
- Я даже проверил цифровую подпись бинарника Проводника и shcore.dll (подробнее об этом ниже) сам, и они оказались в полном порядке, что исключает любую вероятность модификации исполняемых файлов.
- Среди потоков, созданных Проводником (около 50-60), только один постоянно использует процессорное время – немного, но время от времени вызывает небольшой всплеск (скриншот выше).
- Функция, которая находится на вершине стека, это (возможно) необнадёженная функция из
shcore.dll
, на которую ссылаются по её порядковому номеру 172 (см. изображение ниже), но я думаю, что это поведение нормально, поскольку мой ноутбук (тоже v1909) делает то же самое.
Существует другой вопрос здесь, который, похоже, имеет такую же проблему, как у меня, но остаётся без ответа. Я пытался сделать дамп памяти процесса, потому что подумал, что это может помочь в исследовании того, что занято, но у меня нет опыта в исследовании дампов или использовании WinDbg, хотя я мог увидеть содержимое памяти. Я могу предоставить дамп и записать трассировку, если это необходимо. Проводник является системным файлом, поэтому трудно поверить, что в нём могут быть ошибки, более того, я не нашёл ничего, связанного с чрезмерным использованием памяти, как указано на странице Известные проблемы Windows 10 v1909.
Обновление 1:
Это проблемное поведение сохраняется после перезагрузок и, кажется, становится более выраженным, когда у меня открыто окно Проводника (потребление памяти резко возрастает); когда окна Проводника не открыты, его потребление памяти остаётся стабильным.
Обновление 2:
Согласно комментариям @Didier, я попробовал Process Hacker вместо Process Explorer и сделал дополнительные наблюдения. Я вижу выделение памяти для модуля, названного igdusc64
, который постоянно растёт на вкладке Память. Быстрая проверка файла показала, что это библиотека компилятора шейдеров, и она связана с драйвером графики Intel (что имеет смысл, так как в моём компьютере процессор Intel и никаких дискретных графических процессоров).
Я попытался удалить драйвер (откатился на базовый драйвер дисплея от Microsoft), перезагрузил машину. Проблема, похоже, не так сильно ухудшилась, но она определённо никуда не исчезает. Проводник всё равно поглощает память, и теперь в вкладке Память больше ничего не изменяется (большие выделенные блоки сейчас – это сегменты кучи); это заставляет меня задаться вопросом, пытается ли Проводник что-то нарисовать (возможно, иконку?) и застревает в этом процессе.
Обновление 3:
Я попытался отключить все визуальные эффекты (в Расширенных параметрах системы), и, похоже, проблема исчезла. Я всё ещё не уверен, не потребляет ли Проводник память больше или по-прежнему, но очень медленно, поэтому, думаю, я оставлю это на ещё 24 часа, чтобы сделать вывод.
Мне удалось смягчить проблему, отключив все визуальные эффекты (находятся в Расширенных параметрах системы). По-видимому, некоторые функции оформления привели к тому, что Проводник постоянно выделял память для визуальных эффектов, хотя я не смог выделить конкретную функцию оформления, которая это делает.
Ответ или решение
Проблема утечки памяти в Windows Explorer может быть вызвана множеством факторов, и ваш случай, описанный в деталях, предоставляет множество подсказок для анализа. Давайте рассмотрим возможные причины такого поведения и предложим причины и решения.
Возможные причины утечки памяти в Explorer
-
Конфликты с графическими драйверами: Вы уже выявили, что модуль
igdusc64
(библиотека компилятора шейдеров, связанная с Intel) мог участвовать в проблеме. Часто утечки памяти происходят из-за неэффективных взаимодействий между Windows Explorer и графическими драйверами. Обновление драйвера или использование драйвера от Microsoft, как вы уже делали, может снизить влияние на память. Поскольку проблема уменьшилась после отката к базовому графическому драйверу, это подтверждает, что проблема может заключаться в графическом компоненте. -
Визуальные эффекты Windows: Вы заметили, что отключение визуальных эффектов значительно снизило проблему. Windows Explorer использует различные визуальные эффекты, чтобы улучшить взаимодействие пользователя с системой. Если эти эффекты были неправильно реализованы или конфликтовали с аппаратным обеспечением, это могло привести к постоянному выделению памяти. Отключение всех визуальных эффектов позволяет уменьшить нагрузку и, возможно, устранить блокировки в процессе отображения графических объектов.
-
Расширения и плагины: Некоторые сторонние приложения, такие как Google Drive File Stream и Winaero Tweaker, могут добавлять свои собственные иконки или функции во встроенные меню Windows Explorer, что может увеличивать использование памяти. Попробуйте временно удалить или отключить эти приложения, чтобы проверить, не являются ли они источником утечек памяти.
-
Механизм кеширования: Explorer может производить чрезмерное кеширование различных данных, например, значков файлов и папок. Если файлы и папки часто изменяются или обновляются, это может привести к чрезмерному выделению памяти под кэшированные данные. Это особенно часто бывает при работе с сетевыми дисками, даже если вы их отключили.
-
Разработанные компоненты и их взаимодействие: Как вы упомянули, в инсайдерских версиях Windows могут возникать специфические ошибки и баги, связанные с системой. Это может свидетельствовать о том, что некоторые функции или компоненты Explorer, вызываемые другими модулями (например, shcore.dll), могут быть нестабильными или ошибочными в данной версии Windows.
Решения и рекомендации
-
Обновление системы: Рассмотрите возможность обновления вашей операционной системы до более свежей версии Windows 10 или Windows 11. В новых версиях могут быть исправления для известных проблем утечки памяти.
-
Использование встроенных инструментов диагностики: Инструменты, такие как WinDbg и Memory Dump Analyzer, могут помочь в анализе дампов памяти, чтобы выявить причины утечки. Хоть это и требует времени для изучения, они позволяют более глубоко понять, какие именно функции и модули выделяют память.
-
Минимизация сторонних приложений: Попробуйте временно отключить или удалить сторонние расширения и приложения, связанные с проводником, чтобы определить, не они ли являются источником утечек памяти.
-
Мониторинг производительности: Используйте такие инструменты, как Process Explorer и Process Hacker, чтобы отслеживать, какие именно модули или потоки используют наибольшее количество ресурсов. Это может дать ключ к пониманию нарастающей утечки памяти.
-
Экспериментальное отключение дополнительных функций: При желании включать функции визуализации по одному или быстро проводить тестирование может помочь изолировать тот элемент, который вызывает проблему.
Заключение
Утечка памяти в Windows Explorer может происходить по различным причинам, включая конфликты с графическими драйверами, избыточные визуальные эффекты и взаимодействия с сторонними приложениями. Каждое из ваших наблюдений и шагов по устранению проблемы предоставляет полезное направление для диагностики и решения. Продолжайте мониторить ситуацию и накапливать данные для более глубокого анализа.