![]() |
#1 |
Участник
|
контейнер: '+=' vs 'conins' небольшое исследование
Чтоб прочуствовать разницу при использовании вставки в контейнер оператором += и функцией conins написал задачку которая делает вставку в конец контейнера строки int2str(счетчик итераций).
Вот результаты для 100000 итераций: 1) оператор += int2str(i);
2) функция conins(con,conlen(con)+1,int2str(i)); *(поправил)
Замеры кучи сделаны до заполнения контейнера и перед его уничтожением (на всякий случай сделал сжатие кучи), так что в памяти теоретически именно структура контейнера. Все относительно-приблизительно ![]() PS: для 300000 итераций метод с conins выдал Heap check (байты) после запуска "-396071760" , чтой-то с heap классом стало...
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 07.06.2007 в 16:17. |
|
|
За это сообщение автора поблагодарили: belugin (5), kashperuk (3), Logger (3), konopello (2). |
![]() |
#2 |
Banned
|
А как насчет убрать вызов conlen(con) и заменить счетчиком?
|
|
![]() |
#3 |
Участник
|
Думаю, дело тут не в conlen(), а в том, что conins(), фактически, создает новый контейнер.
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#4 |
Участник
|
думаю conlen() даст небольшой прирост. а функция скорее всего создает новый экземпляр контейнера, за счет это может и его более компактное хранение.
Заменил conlen на счетчик - время заполнения 133 сек.
__________________
--- SHiSHok |
|
|
За это сообщение автора поблагодарили: EVGL (2). |
![]() |
#5 |
Участник
|
извиняюсь, недоглядел немного за джобом с conins - конейнер чистился (эксперименты ....), Сейчас расчетные цифры поправлю.
__________________
--- SHiSHok |
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Developer
|
Цитата:
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|