Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.215.188] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
написал прогу, но такое чувство что много памяти кушает =)
Посоветуйте всего начиная от того как очишать все объекты правильно (например CloseHandle - нужно ли вообще, SetLength(массив,0) и т.д.) до того, как правльно пользоваться процедурами/функциями, при выходе из них, данные/переменные которые былои в них сами уничтожаются или ВСё нужно очищать самом и имеет ли значение (в пользу памяти) если я объявлю процедуру в private или вообще не объявлю и т.д. За всё всё заранее спасибо! P.S. вроде были темы тока на счёт сжимание самой проги.. |
Сообщ.
#2
,
|
|
|
Цитата uk- @ правильно (например CloseHandle - нужно ли вообще, SetLength(массив,0) и т.д.) В общем случае для всех языков справедливо: Close handle обязательно. Также DeleteObject (logical pen, brush, font, bitmap, region, or palette) Обычно именно эти обьекты и создают утечку памяти если их не удалять. Если делаете субклассинг, не забывать удалять субклассинг. по поводу локальных обьектов, за исключением динамических обьектов работающих на базе OLE переменные создаются в стеке, которые самоуничтожаются при выходе из процедуру(функции). Статические и глобальные переменные существуют на все время жизни программы. |
Сообщ.
#3
,
|
|
|
Цитата AlexJ @ Также DeleteObject (logical pen, brush, font, bitmap, region, or palette) Обычно именно эти обьекты и создают утечку памяти если их не удалять. тоесть не только BMP.Free; например, а ещё и DeleteObject(BMP); ? |
Сообщ.
#4
,
|
|
|
Цитата uk- @ тоесть не только BMP.Free; например, а ещё и DeleteObject(BMP); ? Конечно нет, все DeleteObject-ы делаются автоматом Насчет общих принципов, на мой взгляд, не следует чрезмерно увлекаться ваянием форм, а подумать об лучшей организации кода. Например, по умолчанию все формы в Delphi создаются автоматически (нужно вручную удалять их из списка автосоздаваемых). Но обычно в приложении пользователь в один момент времени не будет работать больее чем с одним окном, так что все ненужные формы следует создавать по мере надобности, динамически. Кроме этого, можно прибегнуть и к динамическому созданию вкладок, если они чрезмерно нагружены, панелей инструментов, если их много и они схожи по своему назначению. А еще это даст возможность более удобной и быстрой миграции на другие компоненты, да и работать с неперегруженными формами гораздо проще. Почему я так акцентирую на этом внимание? Потому что формы и являются одним из самых больших поедателей памяти, если не учитывать например случаи неосвобождения битмапов по несколько мегабайт или других больших файлов, загруженных в память. Еще одним необходимым условием является необходимость применения try..finally для блоков, где временно создаются какие-то классы. Потому что при возникновении исключения, класс может не освободиться. |
Сообщ.
#5
,
|
|
|
да и расскажи в 2 словах что прога делает.
|
Сообщ.
#6
,
|
|
|
Цитата P.O.D @ да и расскажи в 2 словах что прога делает. она занимает мало места в памяти =)) Что-то вроде чата, с не стандартными функциями.. тоесть можно транслировать звук например (вследствии много переменных и объектов).. вообщем.. это имеет значение разве? Smike пасибо -Added Цитата Smike @ Конечно нет, все DeleteObject-ы делаются автоматом AlexJ говорит обратное или я не понял? |
Сообщ.
#7
,
|
|
|
Цитата uk- @ Что-то вроде чата, с не стандартными функциями.. тоесть можно транслировать звук например (вследствии много переменных и объектов).. вообщем.. это имеет значение разве? А разве нет ? И много это сколько ? А в этом чате еще небойсь куча смайликов (и.т.д) в ресурсах ? |
Сообщ.
#8
,
|
|
|
Цитата uk- @ AlexJ говорит обратное или я не понял? Нет не обратное, я описал в общем, BMP.free и есть под капотом DeleteObject. Если в чистом АПИ тогда DeleteObject, если средствами языка тогда через free. |
Сообщ.
#9
,
|
|
|
Цитата AlexJ @ Цитата uk- @ AlexJ говорит обратное или я не понял? Нет не обратное, я описал в общем, BMP.free и есть под капотом DeleteObject. Если в чистом АПИ тогда DeleteObject, если средствами языка тогда через free. аа понятно -Added Цитата P.O.D @ А разве нет ? И много это сколько ? А в этом чате еще небойсь куча смайликов (и.т.д) в ресурсах ? Вообще ресорсов не так уж и много, но в любом случае я ресурсы убиваю после использования.. Я не то что жалуюсь на то что у меня много памяти жрёт, а просто спрашиваю как можно с экономить её.. Не только в этом каличном чате =) |
Сообщ.
#10
,
|
|
|
Цитата uk- @ Вообще ресорсов не так уж и много, но в любом случае я ресурсы убиваю после использования.. Я не то что жалуюсь на то что у меня много памяти жрёт, а просто спрашиваю как можно с экономить её.. Не только в этом каличном чате =) Память - где - ОЗУ - В диспетчере задач посмотри чего там кушат. Нормальная программа (только форма) порядка 1,4 Mb кушает. Ну а если с визуалом... То больше. Например программа у меня есть которая 20 Мегов жрёт со скинами, а без них 12. И дело тут не в оптимизации памяти, а просто по другому не получится... А если на ВИнте - то в KOL тебе дорога. |
Сообщ.
#11
,
|
|
|
Цитата n0wheremany @ 20 Мегов жрёт со скинами, Цитата n0wheremany @ И дело тут не в оптимизации памяти, а просто по другому не получится... 20 мегабайт? Как по мне многовато. 20 мегабайт – это битмап размером в несколько раз превышающий размер стандартного разрешения монитора в наибольшей цветности. Куда такой скин? |
Сообщ.
#12
,
|
|
|
Цитата Smike @ 20 мегабайт? Как по мне многовато. 20 мегабайт – это битмап размером в несколько раз превышающий размер стандартного разрешения монитора в наибольшей цветности. Куда такой скин? Ну не всё же ограничивается одним битмапом. Помимо визуализации - есть как никак функциональность, вот эта чать и жрёт 12 мегов. Остальное - скины. (ASkin) - программа многоуровневая, многооконная... Полная утилита в общем... (Если посмотреть хочешь) |
Сообщ.
#13
,
|
|
|
давайте всё же к теме.. Может ещё кто что подскажет.. Типа передавать большие параметры как const или var и т.п.
|
Сообщ.
#14
,
|
|
|
Цитата uk- @ Типа передавать большие параметры как const или var и т.п. Ну это непонятно что. Передавать кому и конкретно что? Цитата n0wheremany @ ОЗУ - В диспетчере задач посмотри сколько там кушат. |
Сообщ.
#15
,
|
|
|
Цитата Ну это непонятно что. Передавать кому и конкретно что? параметр в функцию передавть как var либо const что бы не копировало в стек лишнюю память Цитата ОЗУ - В диспетчере задач посмотри сколько там кушат. да знаю я где смотреть и сколько её там.. ВОПРОС не в этом.. Цитата Я не то что жалуюсь на то что у меня много памяти жрёт, а просто спрашиваю как можно с экономить её.. |