![]() |
WinXP x64: Explorer.exe забирает всю оперативную память при вызове контекстного меню.
Если выделить несколько тысяч файлов в одной папке (например 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?...62&topic=14157 а также с десяток англоязычных форумов, но, к превеликому сожалению, нигде не был дан ответ, как от этого избавится. Поэтому у меня очень большая просьба к присутствующим, попробовать повторить указанную последовательность действий у себя , на своей 64 битной винде, и отписаться. Я тогда буду знать, что, либо это фича общая, или же только у меня наблюдается. Размер файла windows\explorer.exe у меня 1,346,480 байт. Последовательность действий: выбрать поиск файлов, затем найти все картинки и выделить все файлы (ctrl+A). запусть taskmgr (ctrl+alt+del) посмотреть, сколько занято памяти. Затем нажать правую кнопку. Посмотреть сколько стало памяти, (ну и сколько файлов было выделено). Затем нажать куда-нибудь , отказавшись от контекстного меню. Снова записать, сколько памяти. итого получится четыре числа: 1) Занятая память до нажатия правой кнопки 2) Занятая память после нажатия правой кнопки 3) Занятая память после отказа от контекстного меню 4) колчество выделенных файлов. (вид отображения у меня был список (list) очень надеюсь на помощь гуру. |
ну что ж, раз никто не отозвался, пришлось самому решить проблему. Путём отладки установил причину этого:
для того, чтобы устранить этот глюк нужно удалить ветку реестра: 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) проблема решена. |
Время: 05:04. |
Время: 05:04.
© OSzone.net 2001-