|  29.11.2005, 10:23 | #1 | 
| Участник | Размер памяти, занимаемой объектом 
			
			Существует ли в Аксапте функция, выдающая размер памяти, занимаемой объектом произвольного типа, переданным в качестве параметра?
		 | 
|  | 
|  29.11.2005, 11:17 | #2 | 
| Участник | 
			
			а зачем?
		 | 
|  | 
|  29.11.2005, 13:54 | #3 | 
| Участник | Цитата: 
		
			Сообщение от belugin
			
			 а зачем? | 
|  | 
|  29.11.2005, 13:56 | #4 | 
| Banned | 
			
			Похоже, не существует. Посмотрите, как задается размер Binary в классе WinAPI. Если же нужно узнать размер сложной структуры, я бы запаковал бы ее в контейнер и посмотрел бы размер контейнера. Цитата: 
		
			Сообщение от belugin
			
			 а зачем? | 
|  | 
|  29.11.2005, 14:05 | #5 | 
| Участник | 
			
			тоже присоединяюсь к вопросу - зачем? если посмотреть хочется, то смотрите недокументированный класс HeapCheck Пример использования в Heaplog.getInfo() | 
|  | 
|  29.11.2005, 14:13 | #6 | 
| Banned | Цитата: 
		
			Сообщение от mazzy
			
			 если посмотреть хочется, то смотрите недокументированный класс HeapCheck Пример использования в Heaplog.getInfo() | 
|  | 
|  29.11.2005, 14:15 | #7 | 
| Участник | Цитата: 
		
			Сообщение от EVGL
			
			 Похоже, не существует. Посмотрите, как задается размер Binary в классе WinAPI. Если же нужно узнать размер сложной структуры, я бы запаковал бы ее в контейнер и посмотрел бы размер контейнера. В общем случае  Цитата: 
		
			Сообщение от EVGL
			
			 HeapCheck имеет много методов. Но ни одного, чтобы посмотреть размер памяти под объект, а не под "блок".  Совершенно верно. Поскольку память в Аксапте (да и в Java-машине) выделяется не под каждый объект. Пусть человек разбирается, если хочется. Может таки разберется и другим рассказывать будет. | 
|  | 
|  29.11.2005, 16:25 | #8 | 
| Участник | 
			
			Всем спасибо, но времени разбираться с недокументированными классами не было, а типы структур данных уже известны - решил сам набросать метод посчитывающий занимаемую память. Считает для::Container, Date, Integer, Real, String, Array, Struct, Map. Для остальных типов возвратит 0. PHP код: 
			 | 
|  | 
|  29.11.2005, 16:33 | #9 | 
| Участник | 
			
			А что это за объект такой RTRTimeAccountProcess? PS И еще - вы уверены что Axapta не выравнивает данные на границу сегмента? 
				__________________ Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 29.11.2005 в 16:36. | 
|  | 
|  29.11.2005, 16:38 | #10 | 
| Модератор | 
			
			Судя про префиксу - самописный. Ага, коламбус внедренцы, скорее всего   Уних с этим строго - не забалуешь. Я предпочитаю суфиксы. С Уважением, Георгий | 
|  | 
|  29.11.2005, 16:38 | #11 | 
| Участник | Цитата: 
		
			Сообщение от SolNik
			
			 Всем спасибо, но времени разбираться с недокументированными классами не было, а типы структур данных уже известны - решил сам набросать... А все из-за документации... Немного критики и предложений: 1. вы ответили не на исходный вопрос "размер памяти, занимаемой объектом", а на другой - "Сколько памяти могут занимать объекты при ваших предположениях". Кроме того, сами предположения требуют пересмотра. Например, непонятно как реально хранится строка - как sz или bsz. 2. Вообще говоря, стоит проверять не только id самого класса, но и id его родителей. Вдруг кто-нибудь от map создаст потомка? Т.е. вместо classIdGet() метод SysDictClass::isSuperClass(...) Разобрались бы с HeapLog. Хоть EVGL и прав - вы не увидите там размер каждого объекта. Но зато очень точно и быстро увидите общий размер памяти, выделенной под различные кучи ... А это как раз то, что вам нужно, насколько я понимаю... | 
|  | 
|  29.11.2005, 17:03 | #12 | 
| Участник | 
			
			А вопрос далеко не прост... Sizeof for Java Java Tip 130: Do you know your data size? Особенно страница с результатами измерения   | 
|  | 
|  29.11.2005, 17:08 | #13 | 
| Участник | Цитата: 
		
			1. вы ответили не на исходный вопрос "размер памяти, занимаемой объектом", а на другой - "Сколько памяти могут занимать объекты при ваших предположениях".
		
	  . Это ни в коем случае не универсальное решение - а как вариант решения такой задачи, который для моего случая вполне подходит. Уверен что есть более красивые решения. По поводу строк - у меня все динамические...не знаю как Аксапта выделяет память для строк фиксированной длины - если резервирует - то функция отработает неверно - но для динамических, я думаю, соответствует кол-ву символов в строке. | 
|  | 
|  29.11.2005, 17:14 | #14 | 
| Участник | 
			
			вы все-таки почитайте результаты измерения. ссылка вверху... | 
|  | 
|  29.11.2005, 17:37 | #15 | 
| Участник | 
			
			http://www.javaworld.com/javaworld/j...tip130-p3.html - и народ еще удивляется, почему жаба жрет столько ресурсов    . Интересно - аксаптовые базовые классы столь же прожорливы... | 
|  | 
|  29.11.2005, 18:03 | #16 | 
| NavAx | Цитата: 
		
			Сообщение от SolNik
			
			 Интересно - аксаптовые базовые классы столь же прожорливы... 
				__________________ Isn't it nice when things just work? | 
|  | 
|  29.11.2005, 18:12 | #17 | 
| Участник | 
			
			...а для этого нужен HeapLog и HeapCheck   программировать не надо   | 
|  |