Загрузка Памяти

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Caliban
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 03.11.2006 (Пт) 0:49

Загрузка Памяти

Сообщение Caliban » 03.11.2006 (Пт) 7:53

VB6.0:

программа получает информацию с базы данных (mysql).
after компиляции программы, после каждого поиска по базе данных(обращения к ней), программа подхватывает в себя по 20-50кб памяти. И если при запуске она занимала 3 мб ...то после тысячи...она весит уже > 20мб (в памяти)

Помогите пожалуйста, что надо сделать, что бы поглащение памяти прекратилось, или минимизировалось. (перезапуск программы с определенным промежутком исключен.)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.11.2006 (Пт) 9:20

А после миллиона?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Caliban
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 03.11.2006 (Пт) 0:49

Сообщение Caliban » 03.11.2006 (Пт) 9:54

не знаю не проверял...
если нечем помочь, я думаю не стоить плодить пустые посты...

Меня интересует вопрос оптимизации работы программ...
Как уменьшить поглащение памяти, как очистить?!
Почему при
set myfirst_form = nothing
unload myfirst_form
количество занимаемой памяти программой не уменьшается, а наоборот увеличивается....
.cls и .clear не помогают....
какие варианты решения этих проблем существуют???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.11.2006 (Пт) 9:57

Тебе уже ответили, запусти поиск миллион раз.
Скорее всего после некоторой величины рост памяти прекратится.
Это при условии, конечно, что все созданное ты уничтожаешь, все загруженное выгружаешь и все открытое закрываешь.
Lasciate ogni speranza, voi ch'entrate.

Caliban
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 03.11.2006 (Пт) 0:49

Сообщение Caliban » 03.11.2006 (Пт) 11:23

Молодые люди...мы ведь не о погоде разговариваем....'скорее всего' - это могут прогноз на погоду так дать.
А тут точность нужна.
Что это за максимальная величина после которой рост памяти прекращается?! как она определяется, исходя из каких условий?

Меня интересуют конкретные вопросы, на форум сюда зашел, потому что хорошие отзывы.
Как правильно уничтожать созданое, загруженое?
если я выгружаю статическую форму - должна ли освобождаться память?!
какие данным в среде VB - являются динамическими, и при их очистке память 100% освобождается.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.11.2006 (Пт) 11:38

Caliban писал(а):мы ведь не о погоде разговариваем....

От чего же, можем и об оной.

Caliban писал(а):'скорее всего' - это могут прогноз на погоду так дать.
А тут точность нужна.

Тест кейс про миллион был озвучен. Почему-то не понравился.

Caliban писал(а):Что это за максимальная величина после которой рост памяти прекращается?! как она определяется, исходя из каких условий?

Он не прекращается, его и сейчас скорее всего нет. Операционка не будет по поводу каждого освобождённого байта проводить массу телодвижений, оно ей не надо. Память будет показана как висящая за процессом, раз она нафиг никому не нужна, а когда винде будет нужно, она её заберёт совсем.

Caliban писал(а):Как правильно уничтожать созданое, загруженое?

Операторами и другими средствами языка, предназначенными для уничтожения созданного и загруженного.
Варьируется в зависимости от природы такового.

Caliban писал(а):если я выгружаю статическую форму - должна ли освобождаться память?!

Что такое статическая форма, и как выгружаю?

Caliban писал(а):какие данным в среде VB - являются динамическими, и при их очистке память 100% освобождается.

В вопросы освобожения памяти самим VB лучше не вмешиваться, ибо он действительно делает это существенно лучше, чем получилось бы иначе.


Всё сказанное не отменяет возможности утечек памяти, вызванных кривым кодом, но это уже отдельный вопрос.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.11.2006 (Пт) 11:57

1. Приведи формы к такому виду:
Код: Выделить всё
Dim frm As New Form1
Set frm = New Form1
Load frm
...
frm.Show [vbModal]
Unload frm
Set frm = Nothing


2. Останавливай все таймеры на форме при ее выгрузке.

3. Избегай Variant без необходимости.

4. Внимательно используй объекты и коллекции. Следи, чтобы не было циклических ссылок.

5. Вдвойне внимательно следи за всем, что создаешь в обход VB.

6. Делай Erase массивов. Правда это ничего не изменит, но код выглядит правильнее и красивее.

7. Воспользуйся, наконец, поиском. Оптимизации на этом форуме посвящено немало тем.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 03.11.2006 (Пт) 11:57

Почему при
set myfirst_form = nothing
unload myfirst_form
количество занимаемой памяти программой не уменьшается, а наоборот увеличивается....
Потому что нужно наборот. А ты сначала освобождаешь переменную от формы, а потом обратно присваиваешь (вроде бы... или нет?), выгруженную, но не убитую. А .cls и .clear вообще загружают ее обратно оставляя невидимой.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 106

    TopList