На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> меньше памяти
    написал прогу, но такое чувство что много памяти кушает =)
    Посоветуйте всего начиная от того как очишать все объекты правильно (например CloseHandle - нужно ли вообще, SetLength(массив,0) и т.д.)
    до того, как правльно пользоваться процедурами/функциями, при выходе из них, данные/переменные которые былои в них сами уничтожаются или ВСё нужно очищать самом и имеет ли значение (в пользу памяти) если я объявлю процедуру в private или вообще не объявлю и т.д.
    За всё всё заранее спасибо!
    P.S. вроде были темы тока на счёт сжимание самой проги..
      Цитата uk- @
      правильно (например CloseHandle - нужно ли вообще, SetLength(массив,0) и т.д.)

      В общем случае для всех языков справедливо:

      Close handle обязательно.
      Также DeleteObject (logical pen, brush, font, bitmap, region, or palette)
      Обычно именно эти обьекты и создают утечку памяти если их не удалять.
      Если делаете субклассинг, не забывать удалять субклассинг.

      по поводу локальных обьектов, за исключением динамических обьектов работающих на базе OLE переменные создаются в стеке, которые самоуничтожаются при выходе из процедуру(функции). Статические и глобальные переменные существуют на все время жизни программы.
      Сообщение отредактировано: AlexJ -
        Цитата AlexJ @
        Также DeleteObject (logical pen, brush, font, bitmap, region, or palette)
        Обычно именно эти обьекты и создают утечку памяти если их не удалять.

        тоесть не только BMP.Free; например, а ещё и DeleteObject(BMP); ?
        Сообщение отредактировано: uk- -
          Цитата uk- @
          тоесть не только BMP.Free; например, а ещё и DeleteObject(BMP); ?

          Конечно нет, все DeleteObject-ы делаются автоматом ;)

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

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

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

          Еще одним необходимым условием является необходимость применения try..finally для блоков, где временно создаются какие-то классы. Потому что при возникновении исключения, класс может не освободиться.
            да и расскажи в 2 словах что прога делает.
              Цитата P.O.D @
              да и расскажи в 2 словах что прога делает.

              она занимает мало места в памяти =))
              Что-то вроде чата, с не стандартными функциями.. тоесть можно транслировать звук например (вследствии много переменных и объектов).. вообщем.. это имеет значение разве?
              Smike пасибо

              -Added
              Цитата Smike @
              Конечно нет, все DeleteObject-ы делаются автоматом ;)

              AlexJ говорит обратное или я не понял?
              Сообщение отредактировано: uk- -
                Цитата uk- @
                Что-то вроде чата, с не стандартными функциями.. тоесть можно транслировать звук например (вследствии много переменных и объектов).. вообщем.. это имеет значение разве?

                А разве нет ? И много это сколько ? А в этом чате еще небойсь куча смайликов (и.т.д) в ресурсах ?
                  Цитата uk- @
                  AlexJ говорит обратное или я не понял?

                  Нет не обратное, я описал в общем, BMP.free и есть под капотом DeleteObject.
                  Если в чистом АПИ тогда DeleteObject, если средствами языка тогда через free.
                    Цитата AlexJ @
                    Цитата uk- @
                    AlexJ говорит обратное или я не понял?

                    Нет не обратное, я описал в общем, BMP.free и есть под капотом DeleteObject.
                    Если в чистом АПИ тогда DeleteObject, если средствами языка тогда через free.

                    аа понятно

                    -Added
                    Цитата P.O.D @
                    А разве нет ? И много это сколько ? А в этом чате еще небойсь куча смайликов (и.т.д) в ресурсах ?

                    Вообще ресорсов не так уж и много, но в любом случае я ресурсы убиваю после использования..
                    Я не то что жалуюсь на то что у меня много памяти жрёт, а просто спрашиваю как можно с экономить её.. Не только в этом каличном чате =)
                      Цитата uk- @
                      Вообще ресорсов не так уж и много, но в любом случае я ресурсы убиваю после использования..
                      Я не то что жалуюсь на то что у меня много памяти жрёт, а просто спрашиваю как можно с экономить её.. Не только в этом каличном чате =)


                      Память - где -
                      ОЗУ - В диспетчере задач посмотри чего там кушат. Нормальная программа (только форма) порядка 1,4 Mb кушает. Ну а если с визуалом... То больше. Например программа у меня есть которая 20 Мегов жрёт со скинами, а без них 12. И дело тут не в оптимизации памяти, а просто по другому не получится...

                      А если на ВИнте - то в KOL тебе дорога.
                        Цитата n0wheremany @
                        20 Мегов жрёт со скинами,

                        Цитата n0wheremany @
                        И дело тут не в оптимизации памяти, а просто по другому не получится...

                        20 мегабайт? Как по мне многовато. 20 мегабайт – это битмап размером в несколько раз превышающий размер стандартного разрешения монитора в наибольшей цветности. Куда такой скин?
                          Цитата Smike @
                          20 мегабайт? Как по мне многовато. 20 мегабайт – это битмап размером в несколько раз превышающий размер стандартного разрешения монитора в наибольшей цветности. Куда такой скин?


                          Ну не всё же ограничивается одним битмапом. Помимо визуализации - есть как никак функциональность, вот эта чать и жрёт 12 мегов. Остальное - скины. (ASkin) - программа многоуровневая, многооконная... Полная утилита в общем... (Если посмотреть хочешь)
                            давайте всё же к теме.. Может ещё кто что подскажет.. Типа передавать большие параметры как const или var и т.п.
                              Цитата uk- @
                              Типа передавать большие параметры как const или var и т.п.


                              Ну это непонятно что. Передавать кому и конкретно что?

                              Цитата n0wheremany @
                              ОЗУ - В диспетчере задач посмотри сколько там кушат.
                                Цитата
                                Ну это непонятно что. Передавать кому и конкретно что?

                                параметр в функцию передавть как var либо const что бы не копировало в стек лишнюю память
                                Цитата
                                ОЗУ - В диспетчере задач посмотри сколько там кушат.

                                :huh: да знаю я где смотреть и сколько её там.. ВОПРОС не в этом..
                                Цитата
                                Я не то что жалуюсь на то что у меня много памяти жрёт, а просто спрашиваю как можно с экономить её..
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0655 ]   [ 16 queries used ]   [ Generated: 9.05.24, 00:37 GMT ]