AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.11.2005, 10:23   #1  
SolNik is offline
SolNik
Участник
 
58 / 36 (2) +++
Регистрация: 22.10.2003
Размер памяти, занимаемой объектом
Существует ли в Аксапте функция, выдающая размер памяти, занимаемой объектом произвольного типа, переданным в качестве параметра?
Старый 29.11.2005, 11:17   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а зачем?
Старый 29.11.2005, 13:54   #3  
SolNik is offline
SolNik
Участник
 
58 / 36 (2) +++
Регистрация: 22.10.2003
Цитата:
Сообщение от belugin
а зачем?
Есть задача разработки алгоритма, работающего с большим объемом данных...часть данных в процессе кэшируется в различные списки, структуры и т.п.. Для оценки требований к ресурсам для приемлемой скорости выполнения этого алгоритма хотелось бы в процессе работы, помимо времени выполнения итераций, отслеживать и потребляемую ими память
Старый 29.11.2005, 13:56   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Похоже, не существует. Посмотрите, как задается размер Binary в классе WinAPI. Если же нужно узнать размер сложной структуры, я бы запаковал бы ее в контейнер и посмотрел бы размер контейнера.

Цитата:
Сообщение от belugin
а зачем?
Встречные вопросы - не всегда самый лучший способ показать компетентность.
Старый 29.11.2005, 14:05   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
тоже присоединяюсь к вопросу - зачем?

если посмотреть хочется, то смотрите недокументированный класс HeapCheck
Пример использования в Heaplog.getInfo()
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2005, 14:13   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от mazzy
если посмотреть хочется, то смотрите недокументированный класс HeapCheck Пример использования в Heaplog.getInfo()
HeapCheck имеет много методов. Но ни одного, чтобы посмотреть размер памяти под объект, а не под "блок". Можно, правда, создать миллион объектов и надеяться, что они займут 99% памяти, которую можно посмотреть в форме SysHeapCheck.
Старый 29.11.2005, 14:15   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от EVGL
Похоже, не существует. Посмотрите, как задается размер Binary в классе WinAPI. Если же нужно узнать размер сложной структуры, я бы запаковал бы ее в контейнер и посмотрел бы размер контейнера.
Размер контейнера и размер выделенной памяти - не одно и тоже.
В общем случае

Цитата:
Сообщение от EVGL
HeapCheck имеет много методов. Но ни одного, чтобы посмотреть размер памяти под объект, а не под "блок".

Совершенно верно. Поскольку память в Аксапте (да и в Java-машине) выделяется не под каждый объект.
Пусть человек разбирается, если хочется.
Может таки разберется и другим рассказывать будет.
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2005, 16:25   #8  
SolNik is offline
SolNik
Участник
 
58 / 36 (2) +++
Регистрация: 22.10.2003
Всем спасибо, но времени разбираться с недокументированными классами не было, а типы структур данных уже известны - решил сам набросать метод посчитывающий занимаемую память. Считает для::Container, Date, Integer, Real, String, Array, Struct, Map. Для остальных типов возвратит 0.
PHP код:
static int getMemSizeOfItem(anyType _item)
{
    
int         i;
    
int         result;
    Array       
arr;
    
Struct      struct;
    
Map         map;
    
MapIterator mi;
    ;

    switch (
typeOf(_item))
    {
        case 
types::Container :
            
result 0;
            for (
i=1i<=conLen(_item); i++)
            {
                
result+=RTRTimeAccountProcess::getMemSizeOfItem(conPeek(_itemi));
            }
        break;

        case 
types::Date result 4;
        break;

        case 
types::Integer result 4;
        break;

        case 
types::Real result 8;
        break;

        case 
types::String result strLen(_item);
        break;

        case 
types::Class :
            switch (
classIdGet(_item))
            {
                case 
classNum(Array) :
                    
arr _item;
                    for (
i=1i<=arr.lastIndex(); i++)
                    {
                        
result+=RTRTimeAccountProcess::getMemSizeOfItem(arr.value(i));
                    }
                break;

                case 
classNum(Struct) :
                    
struct _item;
                    for (
i=1i<=struct.fields(); i++)
                    {
                        
result+=RTRTimeAccountProcess::getMemSizeOfItem(struct.valueIndex(i));
                    }
                break;

                case 
classNum(Map) :
                    
map _item;
                    
mi  = new MapIterator(map);
                    while (
mi.more())
                    {
                        
result+=RTRTimeAccountProcess::getMemSizeOfItem(mi.key());
                        
result+=RTRTimeAccountProcess::getMemSizeOfItem(mi.value());
                        
mi.next();
                    }
                break;
            }
        break;
    }

    return 
result;


Старый 29.11.2005, 16:33   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
А что это за объект такой RTRTimeAccountProcess?

PS И еще - вы уверены что Axapta не выравнивает данные на границу сегмента?
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 29.11.2005 в 16:36.
Старый 29.11.2005, 16:38   #10  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Судя про префиксу - самописный. Ага, коламбус внедренцы, скорее всего Уних с этим строго - не забалуешь. Я предпочитаю суфиксы.

С Уважением,
Георгий
Старый 29.11.2005, 16:38   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от SolNik
Всем спасибо, но времени разбираться с недокументированными классами не было, а типы структур данных уже известны - решил сам набросать...
Жаль... Вот так оно всегда в Аксапте...
А все из-за документации...

Немного критики и предложений:
1. вы ответили не на исходный вопрос "размер памяти, занимаемой объектом", а на другой - "Сколько памяти могут занимать объекты при ваших предположениях". Кроме того, сами предположения требуют пересмотра. Например, непонятно как реально хранится строка - как sz или bsz.
2. Вообще говоря, стоит проверять не только id самого класса, но и id его родителей. Вдруг кто-нибудь от map создаст потомка? Т.е. вместо classIdGet() метод SysDictClass::isSuperClass(...)

Разобрались бы с HeapLog.
Хоть EVGL и прав - вы не увидите там размер каждого объекта.
Но зато очень точно и быстро увидите общий размер памяти, выделенной под различные кучи ...
А это как раз то, что вам нужно, насколько я понимаю...
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2005, 17:03   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
А вопрос далеко не прост...
Sizeof for Java
Java Tip 130: Do you know your data size?
Особенно страница с результатами измерения
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2005, 17:08   #13  
SolNik is offline
SolNik
Участник
 
58 / 36 (2) +++
Регистрация: 22.10.2003
Цитата:
1. вы ответили не на исходный вопрос "размер памяти, занимаемой объектом", а на другой - "Сколько памяти могут занимать объекты при ваших предположениях".
За отсутсвием информации об универсальном решении такой задачи пришлось самому решать свою локальную . Это ни в коем случае не универсальное решение
- а как вариант решения такой задачи, который для моего случая вполне подходит. Уверен что есть более красивые решения.
По поводу строк - у меня все динамические...не знаю как Аксапта выделяет память для строк фиксированной длины - если резервирует - то функция отработает неверно - но для динамических, я думаю, соответствует кол-ву символов в строке.
Старый 29.11.2005, 17:14   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
вы все-таки почитайте результаты измерения.
ссылка вверху...
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2005, 17:37   #15  
SolNik is offline
SolNik
Участник
 
58 / 36 (2) +++
Регистрация: 22.10.2003
http://www.javaworld.com/javaworld/j...tip130-p3.html - и народ еще удивляется, почему жаба жрет столько ресурсов . Интересно - аксаптовые базовые классы столь же прожорливы...
Старый 29.11.2005, 18:03   #16  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от SolNik
Интересно - аксаптовые базовые классы столь же прожорливы...
Оно конечно любопытно, но на практике достаточно нагрузить сервер задачами и посмотреть, сколько сожрет. Если оперативки не хватит, докупить.
__________________
Isn't it nice when things just work?
Старый 29.11.2005, 18:12   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
...а для этого нужен HeapLog и HeapCheck

программировать не надо
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Размер буфера MironovI DAX: Администрирование 5 20.03.2009 11:52
Использование памяти клиентского ПК falcon65 DAX: Администрирование 0 07.11.2007 11:49
Как сохранять размер связанных форм? BlueRose DAX: Программирование 2 15.06.2006 17:06
Неудобство использования аналитик "Цвет" и "Размер" clerk DAX: Функционал 17 23.05.2005 13:08
В памяти остается COM (Excell) bucken DAX: Программирование 3 19.12.2003 18:08

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:30.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.