Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668

Увеличение потребляемой памяти

29.07.2012, 16:02. Показов 2631. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форма динам создается(то грид в ней,то кнопки),а после закрытие естественно стает в очередь на удаление,и тут вдруг пользователю захотелось опять открыть форму,нужен новый экземпляр.
По немного кушает 50-100кб при создании новой.Так вот,сам
вопрос : приведет ли такой код к разбуханию??
//мое мнение не очень,но есть ли вариант принудительно удалить форму?
//не использую Диспоус так как он вызыв при закрытии формы.Стоит ли вызвать сборщик каждый раз?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private void button1_Click(object sender, EventArgs e)
        {
            if (form2 == null)
            {
                form2 = new Form2(1);
            }
            try
            {
                form2.Show();
                form2.Activate();
            }
            catch(ObjectDisposedException o)
            {
                form2 = null;
                button1_Click(sender, e);
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2012, 16:02
Ответы с готовыми решениями:

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

Увеличение используемой оперативной памяти
Доброго времени суток. На C# была написана простая однокнопочная диалоговая форма. При использовании программа постоянно увеличивает...

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

11
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
29.07.2012, 16:18
Не должнен приводить к разбуханию.
После form2 = null; ссылка на объект попадает в список объектов для GC, после чего память либо пудут использована для создания новых объектов, либо возвращена системе (на усмотрение GC).
После выхода form2 из области видимости эта ссылка попадает в тот же список.
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
29.07.2012, 18:03  [ТС]
1)А есть какие-нибудь рекомендации по удалению 2 формы?

2)Целесообразно ли создавать и удалять ее таким образом?

3)Если у меня 20 екземпляров формы,лучше ведь динамически управлять их созданием,не правда ли?
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
30.07.2012, 17:15
1) form2 = null;
Если в форме не осталось работающих потоков после её закрытия, то это всё, что мы можем сделать.

2) Не совсем понимая, что там делается, трудно ответить.

3) Я бы динамически создавал, по мере возникновения надобности в формах. Хотя, если 100% нужны все, можно один раз создать заранее все, чтобы потом не тратилось время на их создание.
1
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
30.07.2012, 23:29  [ТС]
Цитата Сообщение от ksk Посмотреть сообщение
Не совсем понимая, что там делается, трудно ответит
Не хочу держать в памяти 20 обьектов форм,по-этому обьявил как null и создаю когда надо
C#
1
2
3
4
5
 catch(ObjectDisposedException o)
            {
                form2 = null;
                button1_Click(sender, e);
            }
//когда операция над удаленным обьектом

Добавлено через 10 минут
Заменил блок на такой,как считаете так лучше?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (form2 == null)
            {
                form2 = new Form2(1);
            }
            if (form2.IsDisposed != true)
            {
                form2.Show();
                form2.Activate();
            }
            else
            {
                form2 = null;
                button1_Click(sender, e);
            }
З.Ы. Не важно что делает форма,она создается с определенными кнопками и удаляется,ничего заумного.Нужно определять была ли она удалена и по возможности очистить память от нее.

Добавлено через 4 минуты
З.З.Ы. Все не нужны,так как неизвестно захочет ли пользователь открывать их,вроде бы каких то несколько кб,но все же в таком количестве они могут перерасти почти в полметра,если будут держать какие-то данные,например список.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
31.07.2012, 01:25
Цитата Сообщение от Noob.net Посмотреть сообщение
приведет ли такой код к разбуханию??
Нет, если форма должным образом уничтожается через Dispose или Close.

Цитата Сообщение от Noob.net Посмотреть сообщение
есть ли вариант принудительно удалить форму?
Можно вручную вызывать сборщик, но в данном сценарии лучше этого не делать.

Цитата Сообщение от Noob.net Посмотреть сообщение
Стоит ли вызвать сборщик каждый раз?
Нет.

Цитата Сообщение от Noob.net Посмотреть сообщение
Заменил блок на такой,как считаете так лучше?
Лучше вот так:
C#
1
2
3
4
5
6
7
8
void button1_click(object sender, EventArgs e)
{
   if (form2 == null || form2.IsDisposed)
      form2 = new Form2(1);
 
   form2.Show();
   form2.Activate();
}
Логика та же, но без растекания мыслью по древу.
1
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
31.07.2012, 06:46
C#
1
2
3
4
5
catch(ObjectDisposedException o)
            {
                form2 = null;
                button1_Click(sender, e);
            }
В случае возникновения исключения мы тут можем получить бесконечный цикл.

Во избежание - можно спросить юзера не попробовать ли ещё раз, и если да, то button1_Click(sender, e); иначе return.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
31.07.2012, 11:03  [ТС]
Цитата Сообщение от ksk Посмотреть сообщение
бесконечный цикл
Нет,бесконечный цикл не получится,так как сразу создается новый объект рекурсией(проверку на null проходит).


C#
1
(form2 == null || form2.IsDisposed)
Ту-ая балда..А я ставил | и думал в чем проблема,почему не задана ссылка на объект.
Ток вот счас и заметил,вроде бы вещь обыденная...
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
31.07.2012, 11:13
Цитата Сообщение от Noob.net Посмотреть сообщение
А я ставил | и думал в чем проблема,почему не задана ссылка на объект.
Очень распространенная ошибка среди любителей сэкономить на одном символе, которые зачастую даже разницы между операторами не понимают
1
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
31.07.2012, 12:45
Внутри обработчика события Shown(); напиши throw new Exception(); не получишь ли рекурсию?
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
31.07.2012, 13:59  [ТС]
Зачем? не понимаю вашей логики господин.
Я ведь только один DisposedException ловлю,меня остальные не волнуют.
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
01.08.2012, 10:41
Ну, если навсегда только DisposedException, тогда да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2012, 10:41
Помогаю со студенческими работами здесь

C++ Builder 6 увеличивается размер потребляемой памяти
Необходимо чтобы в 3 разный Label'ах отображались текущие часы, минуты, секунды. В таймере Label1 -> Caption =...

Как уменьшить размер потребляемой памяти?
Доброго времени суток)не подскажите как уменьшить размер потребляемой памяти приложением? К примеру моя программа вести почти 2...

Как уменьшить объём потребляемой оперативной памяти?
Используется C# MySql При добавлении в таблицу MySql новых записей растёт потребление оперативной памяти. Код ...

Большой размер потребляемой оперативной памяти приложением
Собственно, программа простая, простенькое винформ приложение с несколькими элементами, а оперативной памяти жрет 50 Мб. Я то на количество...

Как уменьшить объём потребляемой оперативной памяти программой?
Добавляю запись в таблицу MySql кодом private void insertData() { string conStr = "server=127.0.0.1;user=root;" + ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru