CHUNGYUN / flylinkdc

Automatically exported from code.google.com/p/flylinkdc
0 stars 0 forks source link

[Рефакторинг] Сократить размер объекта Identity - при большом кол-ве юзеров жрет память #1110

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
1. Вынести int32 и int64 атрибуты из 
универсального хранилища 
  typedef unordered_map<short, std::string> InfMap;
2. Строковые значения имеющие частую 
повторяемость унести в статический 
справочник а в Identity хранить только uint32 
внешний ключ на строковое значение.

 Кандидаты на проброс в справочник:
// SU - Перечислимый тип поддерживаемых фич
// TA - Тэг - он часто одинаковый у многих 
клиентов
// AP - Название проги
// VE - Версия

3. Унести string значения в отдельный массив 
предварительно собрать статистику по 
использованию.

Данное изменение исключит 
 - Поиск по хеш таблице нужного атрибута в виде строки
 - Преобразование найденной строки в число (если необходимо)
 - Динамическое лишние выделение памяти для параметров типа "число"
   они будут храниться в самом объекте Identity

Original issue reported on code.google.com by Pavel.Pimenov@gmail.com on 26 Jul 2013 at 2:02

GoogleCodeExporter commented 9 years ago
Часть 1 r14746

Original comment by Pavel.Pimenov@gmail.com on 26 Jul 2013 at 2:43

GoogleCodeExporter commented 9 years ago
На своей конфигурации получил экономию 18 
метров RAM
r502-beta96 - 201 Мб
http://www.flickr.com/photos/96019675@N02/9371771522/
Релизная версия после этого фикса - 182 Мб
http://www.flickr.com/photos/96019675@N02/9369003697/

Original comment by Pavel.Pimenov@gmail.com on 26 Jul 2013 at 3:00

GoogleCodeExporter commented 9 years ago
Скачать и протестировать бинари с этими 
изменениями можно тут
http://yadi.sk/d/5ZyZ_zBy7FcH4

Original comment by Pavel.Pimenov@gmail.com on 26 Jul 2013 at 3:30