Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос о занимаемой памяти при работе программы, как уменьшить потребление ресурсов ПК 
:(
    Опции темы
Sett
  Дата 7.8.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброго времени суток всем!

У меня вопрос!

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


Буду очень благодарен, если поможете решить эту задачу.
По возможности пришлите примеры необходимых действий, чем больше тем лучше.

Спасибо.
PM MAIL WWW ICQ   Вверх
Alex
Дата 16.8.2005, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Больше чем уверен, что все формы вы создаете при старте программы, с точки зрения расхода ресурсов это просто недопустимо. Формы должны создаваться по мере их необходимости и как только какая-то из форм не нужна она должна уничтожаться. В идеале при старте программы у вас должна находиться главная форма приложения и Data Module (для БД)
Добавлено @ 21:45
Если на какой-то из форм должно находиться много компонентов и это оформляют в виде закладок, то для обеспечения экономии памяти можно каждую закладку оформить при разработке в виде отдельных форм, а при перемещении по закладкам подгружать формы в закладке.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
bursa
Дата 17.8.2005, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Открывай форму так и все будет ОК

Код

if Form59=nil then
  Form59 := TForm59.Create(Form59);
Form59.Show;

PM MAIL   Вверх
Pakshin A. S.
Дата 17.8.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bursa @ 17.8.2005, 10:54)
Открывай форму так и все будет ОК

Не совсем...

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

Если уже заморачиваться с этим способом, то:

Код

(*Соответственно из автосоздания нафиг удалить все формы, как сказал Alex*)
MyForm2:=TMyForm2.Create(self);
MyFrom2.ShowModal; //Чтобы на следующую строчку дострочно не перешло
MeForm2.Free; //Освобождаем занимаемую память...


Это сообщение отредактировал(а) Pakshin A. S. - 17.8.2005, 10:13
PM   Вверх
Alex
Дата 17.8.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Цитата(Pakshin @ 17.8.2005, 11:13)
Если уже заморачиваться с этим способом, то:

А заморачиваться все равно придется, и если практикуете метод, если вы практикуете столь любимые примеры из книг, когда данные из компонентов одной формы используете в другом модуле, то тоже придется от этого отказываться, т.к. это никудышный способ. Если говорить об не MDI приложениях, то 90% форм при правильном построении программы вы будите вызывать как ShowModal. Если кому-то интересно могу на примерах рассказать как обычно строю свои приложения.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Pakshin A. S.
Дата 17.8.2005, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alex @ 17.8.2005, 11:48)
Если кому-то интересно могу на примерах рассказать как обычно строю свои приложения.
Мне очень интересно! smile
PM   Вверх
Illusion Dolphin
Дата 17.8.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Хочу заметить по поводу кода:
Цитата

MyForm2:=TMyForm2.Create(self);
MyFrom2.ShowModal; //Чтобы на следующую строчку дострочно не перешло
MeForm2.Free; //Освобождаем занимаемую память...


Цитата из хелпа, хочу заметить что это серьёзно (сталкивался с проблемами если это не соблюдать):
Цитата

Note:
When working with form objects, do not explicitly call the Free or Destroy method to free them. Instead, use the Release method, which waits until all event handlers have finished executing.

Кто не понял, надо так:

Код

MyForm2:=TMyForm2.Create(self);
MyFrom2.ShowModal; //Чтобы на следующую строчку дострочно не перешло
MyFrom2.Release; //Waits until all event handlers have finished executing
MeForm2.Free; //Освобождаем занимаемую память...



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Pakshin A. S.
Дата 17.8.2005, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Illusion @ 17.8.2005, 11:51)
MyFrom2.Release;

А в противном случае что будет с приложением? Просто всегда использовал и никогда ничего мне приложение не говорило о неверности действий...
PM   Вверх
Illusion Dolphin
Дата 17.8.2005, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

А в противном случае что будет с приложением?

Столкнулся с этим когда создавал приложение с большим количеством форм, я Release нигде не писал и в какой-то момент начались глюки (похожи на ошибку работы с памятью - вроде всё всюду написано верно, но в некоторых местах вдруг происходят Access Violation'ы), после того как везде проставил Release глюки прошли. После этого стараюсь Release вызывать, т.к. хуже от всё равно не делает (но факт что без него в большинстве случаев всё работает без проблем).

Цитата

90% форм при правильном построении программы вы будите вызывать как ShowModal

А мне бы хотелось узнать про оставшиеся 10? smile, как правильно строить оные (если есть такие правила), т.к. у меня есть большой проектик, где 50% форм вызываеются не ShowModal (приложение многопоточное, в нём реализован проводник по типу виндосовского (многооконный), и куча других форм (главную форму вообще юзер никогда не видит smile ))?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Alex
Дата 17.8.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Цитата(Pakshin @ 17.8.2005, 11:50)
Мне очень интересно!

Хорошо, я подготовлю


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 17.8.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Что касается Release, то существует два метода: 1. Когда вы принудительно вызываете Release. 2. Если в событии OnClose уничтожаемой формы написать: Active:= caFree, то произойдет вызов того же Release

Код

procedure TCustomForm.CloseModal;
var
  CloseAction: TCloseAction;
begin
  try
    CloseAction := caNone;
    if CloseQuery then
    begin
      CloseAction := caHide;
      DoClose(CloseAction);
    end;
    case CloseAction of
      caNone: ModalResult := 0;
      caFree: Release;
    end;
  except
    ModalResult := 0;
    Application.HandleException(Self);
  end;
end;


Теперь немного о том, что же такое Release. Release - это всего навсего отправка форме сообщения CM_RELEASE
Код

procedure TCustomForm.Release;
begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
end;

Когда форма получает это сообщение, то она делает тот же самый Free
Код

procedure TCustomForm.CMRelease;
begin
  Free;
end;

Вы можете спросить "Зачем я буду вызывать Release когда я сам могу вызвать Free?" Дело в том, что при отправке сообщения через PostMessage мы гарантируем, что оно попадет в конец очереди сообщений, а это означает, что до выполнения метода Free выполнятся все оставшиеся в очереди сообщения и все действия, которые должны были произойти при закрытии (уничтожении) формы будут гарантировано выполнены.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
FRAGNATIC
Дата 17.8.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


..::Свирепый Кодер::..
**


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

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



Код

  if not Assigned(About) then About := TAbout.Create(self);
  About.ShowModal;

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


Шустрый
*


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

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



Сколько примеров, надо обязательно всё попробовать!

Спасибо!
PM MAIL WWW ICQ   Вверх
Гость_Гость
Дата 19.8.2005, 00:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Так подождите я чтото не понял как правильно делать:
Так
Код

...
MyFrom2.Release;
MeForm2.Free;

или так
Код

...
MyFrom2.Release;

Объяснити плиз.
  Вверх
Alex
Дата 19.8.2005, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



MyFrom2.Release;


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Sett
Дата 23.8.2005, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приветствую всех!

А что такое MyFrom2.Release что не пойму, что делает эта функция. smile
PM MAIL WWW ICQ   Вверх
Alex
Дата 23.8.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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





--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 2.9.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Так получилось, что тема получила свое продолжение вот в этой теме http://forum.vingrad.ru/index.php?act=ST&f=84&t=63068&st=0


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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