DenZzz
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору geomex omnitrio Цитата: практически все процессы прибавляют в весе порядка 20-30 Мб и помогает только перезагрузка | Ответ разработчика на подобный вопрос: Цитата: Итак, вот полная версия этой истории. Как я понимаю, цифры получены с помощью печально известной программы Task Manager. Эта программа постоянно служит источником самых странных заблуждений и мистификаций. Что же мы там видим? На закладке "Processes" можно показать несколько параметров процесса (колонок), 8 из которых имеют отношение к использованию памяти процессом. Что значат эти цифры? Memory Usage Это число показывает размер текущего Working Set процесса. Working Set - это совокупность всех страниц физической памяти, связанных с процессом. Сюда попадают страницы, занимаемые исполняемым файлом, библиотеками, димамически выделенная в хипе память, и так далее. Эта цифра включает как приватную память процесса, так и разделяемые страницы. Страница, связанная с процессом, может и не содержать никаких полезных данных. Например, при таком сценарии: - выделяем память - обнуляем память (и, возможно, еще как-то ее используем) - освобождаем память операционная система выделит нужное количеству страниц процессу, а затем начнет их постепенно освобождать. При наличии достаточного количества физической памяти страницы могут быть освобождены через несколько часов! Все это время колонка Memory Usage будет показывать, что эти страницы принадлежат процессу (что есть сущая правда), хотя их никто и не использует, и они будут освобождены немедленно, когда понадобятся для чего-нибудь другого. В спайдере происходит в точности именно это. Virtual Memory Size Размер виртуального адресного пространства, выделенного процессу. Грубо говоря, это совокупность виртуальных страниц памяти, принадлежащих процессу. Сюда включаются как физические страницы памяти, так и виртуальная память, выделенная в страничном файле (pagefile), страницы из образов исполняемого файла и динамических библиотек (DLL). Иначе говоря, это сумма размеров кусочков виртуального адресного пространства, которое каким-либо образом связано (commited) страничным механизмом менеждером виртуальной памяти (VMM). Этот параметр имеет несколько большее отношение к реальному использованию памяти процессом, но только в самых общих чертах, на уровне управления виртуальной памятью. Как правило, так памятью никто не пользуется. Программы (и библиотеки) обычно выделяют большой кусок виртуальной памяти заранее (heap), а затем из этого куска уже распределяют более мелкие кусочки (suballocation). Повторяется описанный выше сценарий - память освобождается, но это не отражается в цифрах Task Manager, либо отражается спустя значительное время. Подведем итог. Если машина располагает достаточным количеством памяти, операционная система и вменяемые программы стремятся использовать ее эффективно. Частые выделения и освобождения памяти - медленная операция, потому их стараются избегать. Также медленно происходит чтение с диска, поэтому используюется промежуточное хранение данных в памяти, и так далее. Высокие цифры использования памяти в Task Manager зачастую говорят как раз об оптимизации быстродействия. Второй момент, ни одна из этих цифр (внимание! ) обычно *ничего* не говорит о реальном использовании памяти программой. | Линк: _http://forum.drweb.ru/index.php?showtopic=29150&b=1&st=&p=&# Кстати, на баг-трекере что-то уже писали про более быстрое освобождение памяти... | Всего записей: 2138 | Зарегистр. 09-02-2005 | Отправлено: 16:27 21-02-2006 | Исправлено: DenZzz, 16:29 21-02-2006 |
|