Показать сообщение отдельно
Старый 15.02.2017, 16:53   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,983 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Кстати, упаковка таким способом
X++:
con = [buffer];
buffer = conPeek(con, 1);
[buffer] = con;
Также имеет упомянутые проблемы. Поэтому кучу старого кода при переводе на 12-ю надо перепроверять.

Касательно использования листов и мапов мой коллега еще одну интересную особенность нашел:

Если у нас есть буфер в котором есть куча длинных строковых полей (например, текстовые поля по 250-1000 символов), в которых значение пустое или записана короткая строка, то буфер в памяти занимает все запланированное место. Т.е. поле имеет длину 1000 символов, там хранится строка из 10 символов, то памяти под хранение все равно отведено 1000 символов. И это же верно при сохранении буфера в map. Поэтому если в мапах кешируем много записей у которых куча строковых полей, то они могут сожрать неожиданно много памяти.

Чтобы такого не происходило, можно в мапе хранить контейнеры в которых упакованы буферы. Память существенно экономится. (Все это проверено на 2009-й аксапте. В 2012-й не перепроверяли)

Последний раз редактировалось Logger; 15.02.2017 в 16:58.