07.06.2007, 15:19 | #1 |
Участник
|
контейнер: '+=' vs 'conins' небольшое исследование
Чтоб прочуствовать разницу при использовании вставки в контейнер оператором += и функцией conins написал задачку которая делает вставку в конец контейнера строки int2str(счетчик итераций).
Вот результаты для 100000 итераций: 1) оператор += int2str(i);
2) функция conins(con,conlen(con)+1,int2str(i)); *(поправил)
Замеры кучи сделаны до заполнения контейнера и перед его уничтожением (на всякий случай сделал сжатие кучи), так что в памяти теоретически именно структура контейнера. Все относительно-приблизительно , но выводы относительно скорости работы и занимаемой памяти однозначны. (по памяти результаты с 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 |
Banned
|
А как насчет убрать вызов conlen(con) и заменить счетчиком?
|
|
07.06.2007, 15:27 | #3 |
Участник
|
Думаю, дело тут не в conlen(), а в том, что conins(), фактически, создает новый контейнер.
__________________
Axapta v.3.0 sp5 kr2 |
|
07.06.2007, 15:47 | #4 |
Участник
|
думаю conlen() даст небольшой прирост. а функция скорее всего создает новый экземпляр контейнера, за счет это может и его более компактное хранение.
Заменил conlen на счетчик - время заполнения 133 сек.
__________________
--- SHiSHok |
|
|
За это сообщение автора поблагодарили: EVGL (2). |
07.06.2007, 16:10 | #5 |
Участник
|
извиняюсь, недоглядел немного за джобом с conins - конейнер чистился (эксперименты ....), Сейчас расчетные цифры поправлю.
__________________
--- SHiSHok |
|
16.02.2010, 18:10 | #6 |
Участник
|
|
|
18.02.2010, 15:58 | #7 |
Developer
|
Цитата:
|
|