![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как узнать сколько памяти занимает какой-либо объект? [D6, WinME, Win2k]
SB.John © (2002-03-21 12:47:00)Например TEdit.
Сорри, если такой вопрос уже был
reonid (2002-03-22 12:24:00) [1]>Юрий Зотов
Конечно. Это всего лишь оценочная величина.
Просто это несколько более реалистичная оценка, нежели ИнстансСайз.
Юрий Зотов (2002-03-22 12:13:00) [2]> reonid © (22.03.02 11:55)
Но ведь компонент может перераспределять память в процессе своей работы! Скажем, если к Вашему коду просто добавить:
Form.Caption := Form.Caption + "!!!"
то результат будет уже другим.
reonid (2002-03-22 11:55:00) [3]Если со всеми канвасами, списками компонентов и прочей
динамически выделяемой памятью, то можно так:
ams0 := AllocMemSize;
Form := TForm.CreateNew(nil);
ams1 := AllocMemSize;
FormSize := ams1 - ams0;
Alx2 (2002-03-22 08:41:00) [4]С этого и надо было начинать :)
Здесь связано в большей степени с объемом исполняемого кода (который, кстати, не входит в размер объектов) с ресурсами, хранимыми в exeшнике, с используемыми системными библиотеками ...etc.
Вообщем говоря, вопрос этот регулярно поднимается: поищи по форуму, например слово, KOL.
SB.John (2002-03-22 08:17:00) [5]Всем спасибо. Оба метода работают и показвают одинаковые значения, но что-то очень уж маленькие. форма занимает 752 байта. А почему тогда простейшее приложение (1 пустая форма и все) жрет 1.7 Мб ОЗУ? Не простейшее (работа с БД через БДЕ) до 20 Мб при размере экзешника 2.0 Мб.
Alx2 (2002-03-21 14:10:00) [6]>Юрий Зотов © (21.03.02 13:59)
Тогда надо решить что считать занимаемой памятью. Тем более, что многие данные могут быть общими.
Наверное, более удобно использовать минимальный размер экземпляра класса так как это дает размер некоторого сплошного участка памяти, минимально необходимого для размещения непосредственно объекта-экземпляра.
Юрий Зотов (2002-03-21 13:59:00) [7]Плюс память, выделенная под Text. И плюс другая динамически выделяемая объектом память, если таковая имеется. То есть, в общем случае задача вряд ли имеет решение.
Alx2 (2002-03-21 13:51:00) [8]Вот еще проще: TEdit.InstanceSize :)
Alx2 (2002-03-21 12:55:00) [9]Например, определяем размер экземпляра класса TForm:
Cardinal(Pointer(Integer(TForm)-40)^)