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)
очень надеюсь на помощь гуру.
Вот некоторая статистика (первая колонка - количество занятой памяти, согласно 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)
очень надеюсь на помощь гуру.