Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Освободить память от переменной, Освободить память от переменной 
:(
    Опции темы
Сергейчик
Дата 11.7.2013, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



После того как создана глобальная переменная в форме1 и зарезерирована память под неё 
нужно чтобы при переходе на форму 2 очистить память от этой переменной
Собственно вопрос как это сделать ?
PM MAIL   Вверх
Dumm
Дата 12.7.2013, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.7.2010

Репутация: 1
Всего: 1



Я так понимаю, постановка задачи исключает описание переменной на уровне модуля?
PM MAIL   Вверх
Сергейчик
Дата 14.7.2013, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



а можно код примера в модуле?
для этого нужно на каждую форму отдельный модуль?

PM MAIL   Вверх
Dumm
Дата 14.7.2013, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.7.2010

Репутация: 1
Всего: 1



Форма тоже модуль. Специализированный. В общем-то, это модуль формы. И на уровне модуля формы, тоже можно создавать переменные.
PM MAIL   Вверх
Сергейчик
Дата 14.7.2013, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



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

PM MAIL   Вверх
Dumm
Дата 14.7.2013, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.7.2010

Репутация: 1
Всего: 1



Цитата

только вот созданная переменная в одном модуле форме может быть одинаково именована и в другом модуле формы
без потери данных

Не понял, что значит без потери данных? Если ты переопределяешь переменную в другом модуле, то это уже другая переменная и никаких данных она изначально не содержит. Я так понимаю, ты хочешь просто при переходе на другую форму освобождать память от переменных предыдущей формы для экономии? Тогда уничтожай ненужную форму и память, под нее отведенная, очистится.
PM MAIL   Вверх
Сергейчик
Дата 15.7.2013, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



без потери данных это в  переменных на 1форме(можно конечно почистить но память всё также в резерве под них),новая да изначально очищенна.
да нужно  уничтожить невостребованную форму
только непонятно как запустить сночала 2 форму после убить первую.
PM MAIL   Вверх
Dumm
Дата 15.7.2013, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.7.2010

Репутация: 1
Всего: 1



Код

'Форма 1
Private Sub Form_Load()
Form2.Show
End Sub

Код

'Форма 2
Private Sub Form_Load()
Unload Form1
Set Form1 = Nothing
End Sub

PM MAIL   Вверх
Сергейчик
Дата 15.7.2013, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Нет это не работает переменная да очищается но память так и остаётся зарезервированная.
я думал что это как бы выход из приложения формы 1 и открыть приложение 2 с формой?
PM MAIL   Вверх
Сергейчик
Дата 15.7.2013, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Дело даже может не в переменной вовсе так как сейчас на форме1 сделал текстбокс и кнопку перехода на форму2 и кнопку обратного перехода на форму1
так вот тупо копируя символы в тестбокс  t1 память растёт и после перехода на форму 2 память неполностью возвращается к первоначальному значению (смотрю в диспетчере задач после компиляции)
пробывал по разному, техтбокс первоначально очищаю так быстрей идёт процесс очистки
на первой форме:
Код

Private Sub Command1_Click()
Form2.Show '
Unload Form1
End Sub

Private Sub Form_Terminate()
 T1 = ""
 Set Form1 = Nothing
End Sub

Private Sub Form_Unload(Cancel As Integer)
T1 = ""
Set Form1 = Nothing
memory = "" 'может сюда какой указатель?
MsgBox "Unload формы1"
End Sub
на второй форме
Код

Private Sub Command1_Click()
Form1.Show 
Unload Form2
End Sub


Private Sub Form_Unload(Cancel As Integer)
 Set Form2 = Nothing
MsgBox "Unload формы2"
End Sub


Это сообщение отредактировал(а) Akina - 15.7.2013, 21:52
PM MAIL   Вверх
Akina
Дата 15.7.2013, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Сергейчик, научитесь описывать задачу, а не свои попытки её решить.

Чаще всего проблема состоит в том, что выбран неверный подход к решению задачи.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Сергейчик
Дата 15.7.2013, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Задача та мне вродеб как понятна
чтобы при переходе с одной формы на другую загружаясь она соответствовала точки начала приложения,свои глобальные переменные распространяемые на эту форму(не на приложение в целом) и свои объекты управления. соответственно предыдущая форма полностью 
уничтожена (соответствие точки выхода из программы и полностью освобождена память от её элементов)
вот отсюда и попытки её решения.

Это сообщение отредактировал(а) Сергейчик - 15.7.2013, 23:06
PM MAIL   Вверх
Akina
Дата 16.7.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Сергейчик, Задача должна быть понятна не Вам, а тем, кто Вам будет отвечать. А вот из этого потока сознания
Цитата(Сергейчик @  16.7.2013,  00:05 Найти цитируемый пост)
чтобы при переходе с одной формы на другую загружаясь она соответствовала точки начала приложения,свои глобальные переменные распространяемые на эту форму(не на приложение в целом) и свои объекты управления. соответственно предыдущая форма полностью 
уничтожена (соответствие точки выхода из программы и полностью освобождена память от её элементов)

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




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Сергейчик
Дата 16.7.2013, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Другими словами чтобы форма работала подобием процедуры и при закрытии её полностью всё что сней связано удалялось .
или программа как бы с вложенной программой ввиде отдельной формы и всё что сней связано(формой).
при переходе на другую форму означает закрытие вложенной программы и начало другой.

К примеру запустите диспетчер задач и виндовс  калькулятор понабирайте что небудь справку посмотрите попереходите на различные 
его формы(может там конечно и одна с изменением) и вы увидите что память постоянно растёт(выделяется под эту программу)
далее запустите программу блокнот откройте какой небудь файл накопируйте мегабайт на 150 после создайте новый файл и вы увидите
что память полностью не разгрузилась.
Вот я хотел бы сделать программу подобие калькулятора с разными формами различных расчётов а также формой с загрузкой файла
но только зачем мне лишняя невыгруженная память ведь допустим в новой форме всего пару формул и те в процедуре?  smile 


Это сообщение отредактировал(а) Сергейчик - 16.7.2013, 19:18
PM MAIL   Вверх
Akina
Дата 16.7.2013, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Сергейчик @  16.7.2013,  20:15 Найти цитируемый пост)
чтобы форма работала подобием процедуры и при закрытии её полностью всё что сней связано удалялось .

Выгрузка (не закрытие!) формы приводит к уничтожению всех связанных с ней данных - в т.ч. и переменных, определённых на уровне модуля класса этой формы или ниже.

Цитата(Сергейчик @  16.7.2013,  20:15 Найти цитируемый пост)
вы увидите что память полностью не разгрузилась.

Цитата(Сергейчик @  16.7.2013,  20:15 Найти цитируемый пост)
зачем мне лишняя невыгруженная память 

Этих фраз я в принципе не понял. Хотя и слова вроде все знакомые, но вот смысла - как есть ноль...




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dumm
Дата 16.7.2013, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.7.2010

Репутация: 1
Всего: 1



Цитата

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

Я бы не стал безоговорочно доверять диспетчеру задач в таком деле, как точная оценка памяти, занимаемой приложением. Именно в процессе освобождения ресурсов приложением. Хотя обоснований не привожу.
PM MAIL   Вверх
Сергейчик
Дата 16.7.2013, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Цитата(Akina @ 16.7.2013,  20:13)
Цитата(Сергейчик @  16.7.2013,  20:15 Найти цитируемый пост)
чтобы форма работала подобием процедуры и при закрытии её полностью всё что сней связано удалялось .

Выгрузка (не закрытие!) формы приводит к уничтожению всех связанных с ней данных - в т.ч. и переменных, определённых на уровне модуля класса этой формы или ниже.

Цитата(Сергейчик @  16.7.2013,  20:15 Найти цитируемый пост)
вы увидите что память полностью не разгрузилась.

Цитата(Сергейчик @  16.7.2013,  20:15 Найти цитируемый пост)
зачем мне лишняя невыгруженная память 

Этих фраз я в принципе не понял. Хотя и слова вроде все знакомые, но вот смысла - как есть ноль...

Смысл в том что открыли вы например справку автора программы ваша память зарезервировалась под этот процесс.
далее вы закрыли справку и больше неоткроете её вовсе а память так и осталась невыгруженна и дальнейшая ваша работа 
идёт с этим резервом под этот процесс показа справки хотя вы ею больше и непользуетесь.а память занята непонятно чем?
также и с формами и т.д. 
и естественно эта область памяти недоступна для других программ.
PM MAIL   Вверх
Akina
Дата 17.7.2013, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Сергейчик @  16.7.2013,  21:37 Найти цитируемый пост)
Смысл в том что открыли вы например справку автора программы ваша память зарезервировалась под этот процесс. далее вы закрыли справку и больше неоткроете её вовсе а память так и осталась невыгруженна 

А если второй раз открыть эту "справку автора программы" - ещё откусывается память? а если третий раз открыть? А если выгрузить программу (всю), запустить заново и снова открывать эту "справку" - каждый раз резервируется и не отдаётся память? 
Если да - то это называется утечка памяти и является следствием программной ошибки. Чаще ошибка кода, реже ошибка используемой библиотеки или там фреймворка.
Если же повторные запуски больше не приводят к резервированию и невозвращению памяти - то Вам рано думать о таких вещах. Знаний нехватает.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Сергейчик
Дата 17.7.2013, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Цитата(Akina @ 17.7.2013,  14:35)
Цитата(Сергейчик @  16.7.2013,  21:37 Найти цитируемый пост)
Смысл в том что открыли вы например справку автора программы ваша память зарезервировалась под этот процесс. далее вы закрыли справку и больше неоткроете её вовсе а память так и осталась невыгруженна 

А если второй раз открыть эту "справку автора программы" - ещё откусывается память? а если третий раз открыть? А если выгрузить программу (всю), запустить заново и снова открывать эту "справку" - каждый раз резервируется и не отдаётся память? 
Если да - то это называется утечка памяти и является следствием программной ошибки. Чаще ошибка кода, реже ошибка используемой библиотеки или там фреймворка.
Если же повторные запуски больше не приводят к резервированию и невозвращению памяти - то Вам рано думать о таких вещах. Знаний нехватает.

Да не хватает в этом вопросе отсюда и вопросы для прояснения этой проблемы!
а думать, фонтазировать,мечтать и т.д. это уже внутренняя антагонизма  и не вам решать эту Абстракцию.
Но и от вас ноль пользы только критика и нечего более,которая прослеживается не только на этом форуме.
а прежде чем задавать вопросы про открытие и закрытие могли бы и сами это сделать!
а ждать результат и им оперировать в дольнейшем дурак сможет. smile 

Это сообщение отредактировал(а) Сергейчик - 17.7.2013, 19:04
PM MAIL   Вверх
Akina
Дата 23.7.2013, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Сергейчик @  17.7.2013,  19:55 Найти цитируемый пост)
прежде чем задавать вопросы про открытие и закрытие могли бы и сами это сделать!

Что-то Вы, батенька, туповаты... не могу я это сделать на ВАШЕЙ системе и с ВАШИМ приложением. Вот у себя и со своими приложениями - могу.
Но тут я и без запусков почти всегда знаю, сколько памяти будет использовано при первом открытии, сколько при втором и последующих. Очень редко случается так, что приложение ведёт себя не так, как я ожидаю - тогда я ищу, где ошибка, и исправляю её, если это в пределах моей компетенции.

Цитата(Сергейчик @  17.7.2013,  19:55 Найти цитируемый пост)
и от вас ноль пользы только критика и нечего более

А мне глубоко начхать. Обычно я стараюсь навести автора вопроса на путь, идя по которому, он сам решит свою проблему. Ну а кто настроен топырить пальцы и ждать готового решения - пусть так и ждёт с растопыренными пальцами. Авось дождётся.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Сергейчик
Дата 24.7.2013, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Поздравляю вас что вы с своими приложениями умнее тех кто написал выше перечисленное!
но тут как бы обсуждение VB6 а не ваших инструментов.

На сколько вы уверенны что этот путь будет верным и цель достигнута? smile 
да и где точка отправления ведь вы же говорите что на VB6 это тупик и цель недосягаема?

Это сообщение отредактировал(а) Сергейчик - 24.7.2013, 16:28
PM MAIL   Вверх
Akina
Дата 26.7.2013, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(Сергейчик @  24.7.2013,  17:24 Найти цитируемый пост)
тут как бы обсуждение VB6 

Тут не обсуждение VB6, а открытая демонстрация незнания того, как именно запускаются, работают и взаимодействуют между собой приложение и используемые им внешние ресурсы - динамические библиотеки, COM- и DDE-серверы и пр... Да даже со временем жизни и (взаимной) видимостью различных объектов внутри приложения Вы пока имхо плохо ориентируетесь.

Цитата(Сергейчик @  24.7.2013,  17:24 Найти цитируемый пост)
где точка отправления 

Поиск и изучение информации о всём вышеперечисленном.

Цитата(Сергейчик @  24.7.2013,  17:24 Найти цитируемый пост)
вы же говорите что на VB6 это тупик и цель недосягаема?

Цель? Я пока не вижу постановки задачи. Соответственно, и цели тоже не вижу. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1115 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.