Форум: "Основная";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
ВнизКуда пропадает память? Найти похожие ветки
← →
Мыш (2003-05-14 18:59) [0]Заметил, что если запустить и закрыть мою прогу много раз, кол-во занятой памяти становится 100%. Не понимаю, из-за чего это может происходить, ведь все, что я создаю с помощью create я точно освобождаю, все формы автосоздаваемые, а динамических массивов нет. Единственное, что может есть память в этой проге - это стринглисты, битмапы и один мемори стрим. Но все это абсолютно точно освобождается. Может я не знаю еще о чем-то?
← →
clickmaker (2003-05-14 19:05) [1]кол-во занятой памяти становится 100%
Это как?
← →
Anatoly Podgoretsky (2003-05-14 19:16) [2]Сказки А.С. Пушкина
← →
Serginio (2003-05-14 19:20) [3]При завершении процесса память жрать могут не закрытые системные ресурсы например файлы,битмапы. Поищи в этом напрвлении.
← →
Мыш (2003-05-14 19:20) [4]Ну менеджер процессов показывает загрузку оперативки на 100%, а обычно на 25% где-то.
А Вы Анатолий под "сказками" имеете в виду что я все таки за чем то не уследил?
← →
Anatoly Podgoretsky (2003-05-14 19:24) [5]Ну чудес не бывает, где то не освождаешь память или используешь глюкавые компоненты.
← →
McSimm (2003-05-14 19:36) [6]Маленький секрет - подобная ситуация нереальна даже если в программе вообще не освобождать динамические объекты.
(признаюсь - не уверен относительно битмапов)
← →
nevalex (2003-05-14 20:47) [7]Память на 100% ...а у тебя случайно виртуалка не отключена
...хотя все равно не может быть
Может ты используешь левые(или свои) компоненты которые,возможно не уничтожаются
Попробуй для нихFree
← →
Иван Шихалев (2003-05-14 21:03) [8]Количество всей занятой памяти? Т.е. занятой не только твоей программой? К какому процессу она привязана? К какому модулю (exe/dll)? Правда для ответа на последний вопрос надо смотреть более специализированной программой, чем process manager...
От динамических объектов зависеть не должно, это явно (см. MSDN). Не уверен относительно ресурсов и библиотек. А еще Windows производит кэширование программных модулей в памяти...
Могу посоветовать:
а) Посмотреть, чем память кушается (NU SysInfo, например)
б) Поэкспериментировать с другими программами.
← →
Mystic (2003-05-14 23:08) [9]Посмотри, куда память уходит... Прежде всего AllocMemSize и AllocMemCount. Потом все то, что используешь ты (дескрипторы, ...). Если с этим все в порядке, значит ты выполнил все что мог :)
← →
Мыш (2003-05-14 23:49) [10]Все что использую я (- это, поверьте, совсем немного, пара стримов и стринглистов, пара битмапов, и все!) я освобождаю. Благо количество этих мулек не напрягает насчет проверки. Компоненты - только стандартные и парочка из rxlib.
AllocMemSize и AllocMemCount вообще даже не знаю, что такое :(
Виртуалка - гиг на диске с, размер фиксирован и на min и на max
Единственное, что смущает - может быть виноваты формы, я о них вообще не забочусь, хотя вроде где-то читал, что даже автосоздаваемые надо уничтожать, а лучше не делать автосоздаваемые, может быть это?
← →
Checist [root] (2003-05-14 23:55) [11]Возможно ты закрываешь лишь апликацию своего приложения, например убиваешь не дочернюю форму, а главная находится в состоянии hide. Тогда самой проги видно не будет, как запущенного приложения, но сам процесс останется и будет жрать память, как и раньше.
← →
Verg (2003-05-15 08:56) [12]Догадка только одна: при закрывании программы, сам процесс не завершается, например, остается чегонибудь бесконечно ждать, или повисает на какаом-нибудь таймауте на самом выходе. Т.е. главная форма уже уничтожена и создается впечатление, что программа завершилась, но, если посмотреть в таск манагере в процессах, то она числится на исполнении.
← →
Nucl (2003-05-15 09:11) [13]Запусти прогу на другой машине, посмотри результат там, может у тебя злобный вирус засел ;)
← →
Думкин (2003-05-17 08:31) [14]А процессы точно закрываются? Может они все зависают?
← →
Malder (2003-05-17 10:53) [15]А мне вот что интересно. Все говорят, посмотри - освободил ли ты память и т.д. Так если процесс завершается, все, что находится в его ВАП тоже "уничтожается". Пусть ты там хоть навыделял памяти (и заполнил ее) на 100 Mb. И не освобождаешь в конце. Так если процесс закроется, то винда сама все почистит...
← →
Nerpa (2003-05-17 10:55) [16]Посмотри какие процессы висят в Диспетчере задач:
- до запуска проги
- в момент её работы
- после закрытия проги
Сразу увидешь "кто виноват".
Посмотри также загрузку процессора после завершения твоей проги.
Может какой другой процесс, которого ты активировал, хавает время, пытаясь что-то обрабатывать от тебя.
← →
Шаман (2003-05-17 10:56) [17]Надо бы твою прогу на Win2k/XP запустить и посмотреть что она с памятью такого вытворяет.
← →
hun (2003-05-17 23:08) [18]100% - это круто. А вообще, если запускать простейшую программу (любую) такого эффекта нет? С выделением памяти в виндах вообще все не так однозначно. А по сути проблемы вот такие мысли:
1. Есть такая штука CodeGuard называется. Поставляется, правда с С++ Builder, но насколько я помню можно его и на Дельфи натравить. Заточена специально для поиска утечек памяти.
2. Если я правильно помню, при выгрузке программы все выделенные ей ресурсы убиваются системой. Исключение могут составлть только объекты ядра (насколько я помню). Т.е. либо не уничтожаются потоки, либо что-то из объектов ядра создается и не уничтожается. Что винды считают такими объектами ядра я уже не помню(но грубо все у чего есть Handle или что помнит библитека kernel можно в нашем случае считать объектами ядра - больше не меньше).
3. Если без хитрых программ, то искать такую штуку можно старым добрым методом комментирования всего подозрительного. Либо постепенно закомментируете всю программу, либо когда-нибудь память перестанет пропадать. :))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.29;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c