Форум: "Потрепаться";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];
ВнизСколько программа занимает места в памяти. Найти похожие ветки
← →
Bel (2003-04-17 10:25) [0]Недавно видел тут один пост. Там было "при запуске программа сразу занимает в памяти 6 Мб". Так вот, с помощью чего можно определить, сколько она занимает в памяти места? Хочется поэкспериментировать с разными вариантами программы, чтобы получить более оптимальный как по скорости (это я уже умею), так и по объёму памяти.
← →
Anatoly Podgoretsky (2003-04-17 10:42) [1]Не верь, это выделенное пространство, в которое входят и мапированные билиотеки, кроме того реально в паяти она может занимать 0, а вся находиться в "свопе", на самом деле и это не верь.
Как сказал Мюллер ни кому не верь.
← →
blackman (2003-04-17 11:01) [2]>Anatoly Podgoretsky
Просто ромашка какая-то получается ?
Если WIN 2000 или XP, то можно открыть "диспетчер задач"->"процессы" и смотри на здоровье.
Для 95, 98 не...
← →
Игорь Шевченко (2003-04-17 11:07) [3]blackman © (17.04.03 11:01)
То, что показывает Task Manager, это выделенная в виртуальном адресном пространстве процесса память. Под что ее выделили, и где она в текущий момент находится (RAM, Swap file, EXE, DLL, файлы), это баааальшой вопрос.
← →
han_malign (2003-04-17 11:07) [4]AllocMemCount
AllocMemSize
- то, что реально выделено (и не отпущено) Borland-овским менеджером памяти
← →
han_malign (2003-04-17 11:11) [5]а что бы гарантированно знать где :)))
HeapAllocFlags:=gmem_Fixed;
← →
Danilka (2003-04-17 11:13) [6]Anatoly Podgoretsky © (17.04.03 10:42)
:))
Bel © (17.04.03 10:25)
в FAR (у меня версия 1.70 бетта 4, про остальные версии - не знаю) есть плагин "список процессов", он показывает сколько приложение жрет памяти, и не только это.
← →
Anatoly Podgoretsky (2003-04-17 11:17) [7]Жрет или выделено?
← →
Danilka (2003-04-17 11:27) [8]Anatoly Podgoretsky © (17.04.03 11:17)
- положено - ешь
- так мне не положено
- неположено - не ешь
(с) Летучая мышь
Жрет столько сколько выделено, поступать иначе с ее стороны - просто неблагодарно. :))
← →
blackman (2003-04-17 11:38) [9]>где она в текущий момент находится
А не все ли вам равно где она находится ?
Это дело WIN, а наше только не зашкаливать с размером.
Надо учесть, что в диспетчере есть некоторая динамика и если не запускать тучу прог, то в принципе тенденцию отследить можно.
Конечно точности никакой, но примерно сколько жрет памяти
видно
← →
Bel (2003-04-17 12:15) [10]У меня Windows 98. Кроме стандартных системных средств есть ProcessViewer от Symantec.
Я, может быть, не так выразился: не "сколько памяти", а, скорее всего, "сколько ресурсов" потребляет программа, не важно каких. Чего я хочу достичь: выбирать из нескольких вариантов реализации алгоритма того, который бы меньше потреблял этих самых ресурсов, то есть чтобы вероятность получить Out of resourses была как можно меньше.
Я собираюсь делать так: написать один вариант куска программы, запустить и посмотреть, сколько он потребляет. Потом другой вариант. И из них выбрать тот, который потребляет меньше.
← →
Игорь Шевченко (2003-04-17 13:12) [11]Out of resourses к памяти не имеет никакого отношения. Чаще всего это нехватка ресурсов GDI (шрифты, кисти, перья, битмапы и т.д.)
← →
blackman (2003-04-17 13:48) [12]>Игорь Шевченко
Это с графикой, а если БД ?
← →
Bel (2003-04-17 13:50) [13]Ну, значит не "Out of resourses", а что-то другое, я не знаю.
Почитал хэлп насчёт
> han_malign © (17.04.03 11:07)
> AllocMemCount
> AllocMemSize
Насколько я понял, это похоже на то, что мне нужно. Но эти переменные нужно использовать в программе. А я бы хотел, чтобы можно было видеть занимаемую память извне.
← →
Игорь Шевченко (2003-04-17 13:55) [14]blackman © (17.04.03 13:48)
Это не обязательно с графикой. Любой потомок TWinControl начинает есть ресурсы GDI и USER. В Win2k и выше в Task Manager есть даже столбцы специальные, показывающие количество используемых ресурсов обоих видов.
← →
blackman (2003-04-17 14:04) [15]Игорь Шевченко
Это понятно. Меня интересует, что еще существенно увеличит затраты, если используется база данных.
Буфер под блок записей... и ?
← →
Danilka (2003-04-17 14:27) [16]Bel © (17.04.03 12:15)
>из нескольких вариантов реализации алгоритма ...
Может я чего-то не понимаю, но, когда сам пишешь всегда видишь какой алгоритм лучше, какой нет, сначала получается что-то не оптимальное, затем это что-то оптимизируешь.
Честно говоря, не пойму, к чему все эти заморочки. Разве что искать утечки памяти, но примерно оценить есть они или нет можно и таск-мененджером. А прикинуть, что будет больше расходовать память... дык, какие проблемы по своим-то исходникам???
← →
Bel (2003-04-17 15:11) [17]> Danilka © (17.04.03 14:27)
> когда сам пишешь всегда видишь какой алгоритм лучше, какой нет, сначала получается что-то не оптимальное, затем это что-то оптимизируешь.
У каждой медали есть две стороны. Один вариант алгоритма может выполняться быстрее, но расходовать больше памяти, другой - наоборот. Ну, и, кроме того, какой-то вариант может быть просто красивым, хотя и не оптимальным. Но, в любом случае, всё познаётся в сравнении. Зачем извращаться, если улучшения будут совсем небольшие. Так вот, чтобы сравнивать варианты, мне всё это и нужно.
Например, если мне надо выяснить, какой вариант быстрее, я ставлю кусок кода в цикл итераций эдак на 100000, засекаю время на его выполнение. Потом то же самое с другим вариантом кода. Потом сравниваю, если разница большая, то выбираю тот, который быстрее.
И тот же принцип хочется использовать для оптимизации расхода памяти. А вот как определить, сколько памяти расходуется? Чтобы было что с чем сравнивать.
Об утечках памяти речь пока не идёт, это уже другой вопрос.
> А прикинуть, что будет больше расходовать память... дык, какие проблемы по своим-то исходникам???
Дык, в том то и проблема, что по исходникам проблематично (по крайней мере, для меня) определить, сколько программе нужно будет памяти. Например, для решения какой-то задачи понадобится штук 100-200 StringList"ов одновременно. Как узнать, какое решение будет оптимальнее, это? или другое, где StringList"ов будет поменьше. Или ещё пример: в проекте штук 30-40 форм. Можно их все создавать сразу при запуске, а можно по мере надобности создавать, а потом уничтожать. Как узнать, какой вариант выгоднее?
← →
blackman (2003-04-17 15:28) [18]>100-200 StringList"ов ... штук 30-40 форм ?
Можно и не узнавать. Сразу ясно что не оптимальное.
Где повторное использование?
И вообще, кто это будет у тебя сразу смотреть 100-200 StringList"ов.
Надо не меньше 2-х пар очков... или лупу.
Видимо проект не продуман и говорить о оптимизации памяти нечего.
← →
Anatoly Podgoretsky (2003-04-17 15:50) [19]Тут до измерения еще далеко!
Правила экономии - просто не иметь про запас, а столько сколько нужно для выполнения задачи. Это же надо придумать создать при открытии 40 форм :-), думаю со StringList ситуация такая же, а потом удивляемся откуда Out of resourses
← →
Bel (2003-04-17 16:02) [20]> blackman © (17.04.03 15:28)
Ну, это же я только для примера привёл.
А насчёт 30-40 форм - это вполне реально. Вот у коллеги в проекте 20 форм, и он все их создаёт сразу. Пытался было с ним поговорить на эту тему, так он сам в этом не разбирается. Теперь оба мучаемся.
> И вообще, кто это будет у тебя сразу смотреть 100-200 StringList"ов.
Смотреть их и не надо, это же не визуальный компонент.
Ну, допустим, понадобилось хранить кучу строк для работы. Можно их подгружать по мере надобности, а можно держать все в памяти. Опять же повторюсь, это просто абстрактный пример, не привязывайтесь к нему, важен только принцип.
← →
FLIZ (2003-04-17 16:13) [21]2 Bel
> Или ещё пример: в проекте штук 30-40 форм. Можно их все
> создавать сразу при запуске, а можно по мере надобности
> создавать, а потом уничтожать. Как узнать, какой вариант
> выгоднее?
Извини, ты это насколько серьезно? Отдает идиотизмом, если честно.
Может вообще сразу весь хард при старте в память считывать
тогда уж? или только половину? что эффективнее? :)))
← →
VAleksey (2003-04-17 16:29) [22]О нехватке ресурсов ты узнешь сразу. С этой точки и начинай эксперименты.
← →
Bel (2003-04-17 16:46) [23]> FLIZ © (17.04.03 16:13)
> Извини, ты это насколько серьезно? Отдает идиотизмом, если честно. Может вообще сразу весь хард при старте в память считывать тогда уж? или только половину? что эффективнее? :)))
Говорю же, сам видел у коллеги 20 создаваемых форм, и у него на этот счёт никаких сомнений не было, а у меня возникли. Так что, мне можно сказать, что он идиот? :)
← →
Anatoly Podgoretsky (2003-04-17 16:54) [24]Bel © (17.04.03 16:46)
Нельзя, со временем поймешь почему. Но у тебя же наверно есть своя голова, что бы не брать пример с идиотов?
← →
Bel (2003-04-17 17:02) [25]> VAleksey © (17.04.03 16:29)
> О нехватке ресурсов ты узнешь сразу. С этой точки и начинай эксперименты.
Сразу может и не вылезти. Ведь программа постоянно растёт и может быть такое, когда в один прекрасный момент придётся возвращаться к тому коду, который писал полгода назад, чтобы оптимизировать его, или даже полностью переписать. (Я не говорю пока о багах, к ним возвращаться придётся.) Ведь можно же позаботиться заранее о том, чтобы потом как можно меньше возвращаться назад.
К тому же, нехватка ресурсов может вылезти только у клиента, если там машина послабее моей.
Согласен с Anatoly Podgoretsky © (17.04.03 15:50), экономить надо. Просто надо найти золотую середину между растранжириванием ресурсов и скупердяйством по отношению к ним.
← →
Bel (2003-04-17 17:11) [26]> Anatoly Podgoretsky © (17.04.03 16:54)
> Нельзя, со временем поймешь почему.
Кроме морального аспекта (не стану же я обзываться, как ребёнок), здесь получается выигрыш по времени, не надо тратить каждый раз время на создание формы. Это вы имели в виду?
> Но у тебя же наверно есть своя голова, что бы не брать пример с идиотов?
Есть. Я и не беру с него пример. Просто запал что-то этот вопрос мне в голову, вот и пытаюсь понять.
Да уж, нелёгок путь к знаниям. :)
← →
Anatoly Podgoretsky (2003-04-17 17:37) [27]Bel © (17.04.03 17:11)
Зачем нам выигрыш по времени если от это программа будет не работоспособной :-)
Неработоспособность достигается и более легкими путями.
← →
Soft (2003-04-17 18:06) [28]>>Кроме морального аспекта (не стану же я обзываться, как ребёнок), здесь получается выигрыш по времени, не надо тратить каждый раз время на создание формы. Это вы имели в виду?
Даешь весь винт в собственном свапу:)) Выполним и перевыполним!!!:))
← →
Bel (2003-04-18 13:27) [29]Ну вот, уже ёрничать начали.
Ладно, оставим абстрактные примеры, раз уж я не могу объяснить, чего хочу. Поговорим лучше о конкретном.
Поэкспериментировал я с AllocMemSize (спасибо han_malign). Насколько я понял, эта переменная показывает сколько памяти выделено системой под сегмент данных программы. Например, для пустой формы это значение было ~7 Кб. А для того проекта (где 20 форм создаются) оно было ~1 Мб. Ответьте пожалуйста, можно ли использовать цифры, полученные таким путём, для сравнения ресурсоёмкости программ? Т.е. если я сравню полученные значения для разных вариантов алгоритма и одно значение будет в 1.5 раза больше, могу ли я сказать, что этот вариант в ~1.5 раза больше расходует память?
И ещё, ~1 Мб - это слишком много или не очень? Какое значение (не конкретную цифру, а хотя бы её порядок) можно считать приемлемым?
← →
Anatoly Podgoretsky (2003-04-18 13:32) [30]Использовать можно, сказать тоже можно, а вот к истине это отношения может не иметь. Хитрая это штука управление оперционной системой своей памятью, да еще может измениться от времени или от наличия ресурсов.
Надо не оценивать, а экономить.
← →
Bel (2003-04-18 13:55) [31]> Anatoly Podgoretsky
Совершенно с Вами согласен, экономить надо. Вот только как оценить, насколько один вариант экономнее другого. Если, например, какой-то способ экономит всего сотню-две байт, но намного запутаннее другого, стоит ли его применять? Вопрос-то и состоит в том, как оценить это.
← →
Anatoly Podgoretsky (2003-04-18 14:08) [32]а вот попробуй оцени два почти одинаковых варианта, по использованию памяти различаются очень резко.
const
X1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
resourcestring
X2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
ты можешь использовать таскманажер как грубый инструмент для оченки, для платформы НТ смотри не на вылеллную память, а на коммитед
← →
Bel (2003-04-18 14:31) [33]А если у меня не NT, а 98? Тогда где смотреть?
← →
Anatoly Podgoretsky (2003-04-18 14:46) [34]Тогда немного хуже, используй системный монитор, но возможности много хуже, цифры тебе придется интерпритировать по мере своего понимания.
Приведу пример, например есть 512 мб оперативной памяти, показывает, что использовано 200 мб и в свопе 128 мб, на самом деле своп размером в 0 байт. Это к примеру о мапировании :-)
← →
Bel (2003-04-18 15:10) [35]> используй системный монитор
Это который sysmon.exe (Программы -> Стандартные -> Служебные -> Системный монитор)? Там вообще ничего не понятно. возможности много хуже - это слабо сказано. :)
У меня есть SysInfo из Нортон утилит, там много чего показывается. Вот только не могу понять пока, какой именно параметр там смотреть.
← →
Anatoly Podgoretsky (2003-04-18 15:25) [36]Ну для этого что бы понять стоит почитать Рихтера.
← →
Bel (2003-04-18 16:12) [37]Ну, ладно, не буду больше мучить вопросами. Уже и сам устал, и вас, наверное, достал.
Скажите только напоследок, как называется книга Рихтера?
← →
Anatoly Podgoretsky (2003-04-18 16:14) [38]http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/C/zip/richter4ru.zip&file_id=Richter4ru
Полезная вещь, если хочешь понять устройство Виндоус
← →
Bel (2003-04-18 16:43) [39]> Anatoly Podgoretsky © (18.04.03 16:14)
Большое спасибо за внимание. Надеюсь, со временем стану таким же умным, как Вы. :))
> Полезная вещь, если хочешь понять устройство Виндоус
Хочу. Уже давно хочу. Всё как-то руки не доходили. Теперь есть толчок к этому, буду изучать.
Ещё раз большое спасибо. :))
← →
AlexKniga (2003-04-18 17:56) [40]2 Bel © (18.04.03 16:43)
Загляни на http://www.sysinternals.com
Многие проги идут с исходниками.
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.01 c