Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / освобождение памяти / 8 сообщений из 8, страница 1 из 1
16.04.2004, 14:43
    #32484402
Турист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
Допустим, у меня есть функция.
В ней я пишу:
Dim command1 As New SqlClient.SqlCommand("select * from table1", connection1)
Перед тем, как выйти из функции, мне нужно писать command1.Dispose() ?
Или command1 удалится автоматически при закрытии функции?

Заранее благодарен за полезную информацию.
...
Рейтинг: 0 / 0
16.04.2004, 15:18
    #32484511
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
В принципе не нужно. При выходе из области видимости обьект будет помечен как удаленный и сборщик освободит его память вместе со всем поколением.

Если хочешь наверняка то вызывай Dispose. И потом сразу Gc.Collect();


Magnus
...
Рейтинг: 0 / 0
16.04.2004, 15:46
    #32484565
Турист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
Большое спасибо за полезную информацию.
...
Рейтинг: 0 / 0
16.04.2004, 16:04
    #32484617
Турист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
А как будет правильней?

1)
dim textbox1 as new textbox
dim textbox2 as new textbox
...
textbox1.dispose
textbox2.dispose
Gc.Collect()

или

2)
dim textbox1 as new textbox
dim textbox2 as new textbox
...
textbox1.dispose
Gc.Collect()
textbox2.dispose
Gc.Collect()
...
Рейтинг: 0 / 0
16.04.2004, 18:18
    #32484958
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
Раз уж начал, обьясню еще кое что, но тема обьемная и для глубокого понимания нужно смотреть мануалы.
dispose вызывать самому можно но особой необходимости в этом нет. Только в редких случаях когда возникают проблемы из за не освобожденного обьекта.
То же самое относится и к Gc.Collect() - этот метод будучи вызван без параметров освобождает память ВСЕХ обьектов ВСЕХ поколений. Его нужно вызывать только один раз. Но снова же, только если есть какие либо проблемы. Если нет, то и не трогай его.

Т.е. вариант 1.
Хотя как уже сказал в Gc.Collect() нет необходимости. Все будет собрано автоматически.

Magnus
...
Рейтинг: 0 / 0
19.04.2004, 09:11
    #32485789
Турист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
Большое спасибо за полезную информацию
...
Рейтинг: 0 / 0
18.02.2005, 20:07
    #32924320
BusyMan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
Magnus23 При выходе из области видимости обьект будет помечен как удаленный и сборщик освободит его память вместе со всем поколением.
А когда запускается сборщик мусора? Сам запускается или не всегда?
А если сам, то как можно запустить самому?
...
Рейтинг: 0 / 0
19.02.2005, 15:39
    #32924727
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
освобождение памяти
BusyMan Magnus23 При выходе из области видимости обьект будет помечен как удаленный и сборщик освободит его память вместе со всем поколением.
А когда запускается сборщик мусора? Сам запускается или не всегда?
А если сам, то как можно запустить самому?

освобождение будет не ведомо когда, но коллектор восновном активно активизируется если приложению не хватает памяти, так что нет ни какой 100% гарантии, что твой объект, который давно никому не нужен не провесит до конца работы приложения.
Ну а сделать это принудительно мона так
Код: plaintext
1.
2.
GC.Collect()
GC.WaitForPendingFinilizers()
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / освобождение памяти / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]