Войти

Показать полную графическую версию : [решено] WinXP x64: Explorer.exe забирает всю оперативную память при вызове контекстного меню.


Alex Cop
17-01-2010, 16:19
Если выделить несколько тысяч файлов в одной папке (например 15-20 тысяч), и нажать правой кнопкой, исчерпывается вся память. Если выделить поскромнее , например, 1000 файлов, то выделяется довольно много памяти процессом Explorer.exe (около 160Гб) Однако, если проигнорировать контекстное меню, память не освобождается. При повторном нажатии, память снова выделяется, но не освобождается. и это повторяется, пока память не исчерпается. Я проверил на трёх разных ОС WinXP 32-bit, там во-первых, выделяется не так много памяти (порядка 6-10 мегабайт на выделенных 7000 файлов), а во-вторых, память возвращается системе. А вот на единственной доступной мне x64 такого не происходит. В безопасном режиме происходит то же самое.

Вот некоторая статистика (первая колонка - количество занятой памяти, согласно taskmgr в мегабайтах), во второй колонке - на каком этапе это количество наблюдается.
Система только загрузилась - 541
выделил в папке 1000 файлов и нажал правую кнопку - 704
отказался от контекстного меню - 699
снова правая кнопка - 857
отказался - 853
итд:
0.98Гб
1.13
1.29

видно, что при отказе от контекстного меню освобождается та память, которая освобождается и на 32 битных системах. Но откуда берётся примерно 160 гб памяти на выделение 1000 файлов? Почему эта память не возвращается системе? (файлы совсем маленькие, по 40 килобайт)

Я запустил SysinternalsSuite\vmmap.exe и установил, что пямять занимается в private области процесса Explorer.exe
иными словами используется функция, скорее всего, VirtualAlloc, но соответствующая ей функция освобождения памяти не вызывается.

в интернете попались сообщения о подобном поведении, например, http://forum.ru-board.com/topic.cgi?forum=62&topic=14157
а также с десяток англоязычных форумов, но, к превеликому сожалению, нигде не был дан ответ, как от этого избавится.

Поэтому у меня очень большая просьба к присутствующим, попробовать повторить указанную последовательность действий у себя , на своей 64 битной винде, и отписаться. Я тогда буду знать, что, либо это фича общая, или же только у меня наблюдается. Размер файла windows\explorer.exe у меня 1,346,480 байт.

Последовательность действий:
выбрать поиск файлов, затем найти все картинки и выделить все файлы (ctrl+A). запусть taskmgr (ctrl+alt+del) посмотреть, сколько занято памяти. Затем нажать правую кнопку. Посмотреть сколько стало памяти, (ну и сколько файлов было выделено). Затем нажать куда-нибудь , отказавшись от контекстного меню. Снова записать, сколько памяти. итого получится четыре числа:
1) Занятая память до нажатия правой кнопки
2) Занятая память после нажатия правой кнопки
3) Занятая память после отказа от контекстного меню
4) колчество выделенных файлов.

(вид отображения у меня был список (list)

очень надеюсь на помощь гуру.

Alex Cop
20-01-2010, 12:10
ну что ж, раз никто не отозвался, пришлось самому решить проблему. Путём отладки установил причину этого:
для того, чтобы устранить этот глюк нужно удалить ветку реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\{C539A15A-3AF9-4c92-B771-50CB78F5C751}

это ветка для вызова библиотеки Acronis:
C:\program files (x86)\acronis\trueimagehome\tishell.dll (вервия файла 11,0,0,8059)
проблема решена.




© OSzone.net 2001-2012