Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-94886
viol-2
2003-05-16 15:19
2003.05.29
Память как диск


1-94854
sapsi
2003-05-20 08:00
2003.05.29
Обновление меток


1-94865
bss
2003-05-20 11:49
2003.05.29
Fatal Error File not found System.pas


1-94836
paxer
2003-05-19 19:28
2003.05.29
Параметр, переданный приложению при запуске


3-94676
Котяра
2003-05-12 21:09
2003.05.29
Компоненты ADO (конкретно TADOQuery) в Delphi 5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский