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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.06.2007, 15:19   #1  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
контейнер: '+=' vs 'conins' небольшое исследование
Чтоб прочуствовать разницу при использовании вставки в контейнер оператором += и функцией conins написал задачку которая делает вставку в конец контейнера строки int2str(счетчик итераций).
Вот результаты для 100000 итераций:
1) оператор += int2str(i);
  • время вставки 2 сек
  • Heap check (байты) до запуска : 5894448
  • Heap check (байты) после запуска : 8018832
  • Heap check (блоки) до запуска : 61976
  • Heap check (блоки) после запуска : 78172

2) функция conins(con,conlen(con)+1,int2str(i)); *(поправил)
  • время вставки 152 сек
  • Heap check (байты) до запуска : 4847552
  • Heap check (байты) после запуска : 6826240
  • Heap check (блоки) до запуска : 56402
  • Heap check (блоки) после запуска : 72157

Замеры кучи сделаны до заполнения контейнера и перед его уничтожением (на всякий случай сделал сжатие кучи), так что в памяти теоретически именно структура контейнера.
Все относительно-приблизительно , но выводы относительно скорости работы и занимаемой памяти однозначны. (по памяти результаты с conins перемерял - теперь видно что порядок примерно одинаковый)*

PS: для 300000 итераций метод с conins выдал Heap check (байты) после запуска "-396071760" , чтой-то с heap классом стало...
__________________
--- SHiSHok

Последний раз редактировалось SHiSHok; 07.06.2007 в 16:17.
За это сообщение автора поблагодарили: belugin (5), kashperuk (3), Logger (3), konopello (2).
Старый 07.06.2007, 15:21   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
А как насчет убрать вызов conlen(con) и заменить счетчиком?
Старый 07.06.2007, 15:27   #3  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Думаю, дело тут не в conlen(), а в том, что conins(), фактически, создает новый контейнер.
__________________
Axapta v.3.0 sp5 kr2
Старый 07.06.2007, 15:47   #4  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
думаю conlen() даст небольшой прирост. а функция скорее всего создает новый экземпляр контейнера, за счет это может и его более компактное хранение.
Заменил conlen на счетчик - время заполнения 133 сек.
__________________
--- SHiSHok
За это сообщение автора поблагодарили: EVGL (2).
Старый 07.06.2007, 16:10   #5  
SHiSHok is offline
SHiSHok
Участник
Аватар для SHiSHok
Дети Юза
 
219 / 103 (4) +++++
Регистрация: 28.07.2005
Адрес: Донецк
извиняюсь, недоглядел немного за джобом с conins - конейнер чистился (эксперименты ....), Сейчас расчетные цифры поправлю.
__________________
--- SHiSHok
Старый 16.02.2010, 18:10   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,947 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
PS: для 300000 итераций метод с conins выдал Heap check (байты) после запуска "-396071760" , чтой-то с heap классом стало...
С ним это самое "не то " достаточно часто становится. Еще нередко минуса показывает когда память в своп залезает.
Старый 18.02.2010, 15:58   #7  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от SHiSHok Посмотреть сообщение
PS: для 300000 итераций метод с conins выдал Heap check (байты) после запуска "-396071760" , чтой-то с heap классом стало...
Цитата:
Сообщение от Logger Посмотреть сообщение
С ним это самое "не то " достаточно часто становится. Еще нередко минуса показывает когда память в своп залезает.
Скорее всего потому, что windows возвращает кол-во байт в формате unsigned dword, а аксапта принимает как signed dword, поэтому значения, которые больше 0x7FFFFFFF, и отображаются в аксапте с минусом...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как средствами SQL QA разобрать контейнер по частям lyolea84 DAX: Программирование 8 26.01.2015 12:00
Контейнер из метода joinedDatasources() - как его разобрать ? TasmanianDevil DAX: Программирование 2 18.03.2011 12:28
контейнер: += трагедия вставки пустой строки. SHiSHok DAX: База знаний и проекты 10 22.01.2008 19:01
Контейнер в данных элемента ListView TasmanianDevil DAX: Программирование 3 28.11.2006 12:01
Передать контейнер в job через COM sao DAX: Программирование 5 21.02.2006 19:34
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:21.