Используя меньше памяти для по... Заметка
RSS Джулия Эванс

Используя меньше памяти для поиска IP-адресов в Mess With DNS

Автор программы Mess With DNS столкнулся с проблемой, когда программа вышла за пределы доступной памяти и была завершена из-за нехватки оперативной памяти, что привело к проблемам с резервным скриптом. Чтобы решить эту проблему, автор решил попробовать уменьшить потребление памяти программой. Программа загружает базу данных IP-адресов в память, что занимало примерно 117 МБ памяти. Автор попробовал три разных подхода для уменьшения потребления памяти.Первый подход заключался в использовании SQLite для хранения данных на диске, что решило первоначальную проблему с памятью, но имело проблемы с хранением IPv6-адресов и был в 500 раз медленнее, чем исходный бинарный поиск. Второй подход заключался в использовании trie, но он использовал больше памяти и был медленнее, чем исходный бинарный поиск.Третий подход заключался в том, чтобы заставить массив использовать меньше памяти, удалив дубликаты полей Name и Country, что снизило потребление памяти с 117 МБ до 65 МБ, а затем переключение на netip.Addr вместо net.IP, что сэкономило еще 20 МБ памяти, в результате чего общий объем составил 46 МБ. Автор смог сэкономить 70 МБ памяти в общей сложности.