From: bert hubert Date: Wed, 13 Jun 2018 08:47:50 +0000 (+0200) Subject: speed up dedup code, use less memory X-Git-Tag: dnsdist-1.3.1~31^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9d40dd1fadeea93aa0fe8933e493424a635cfcf7;p=thirdparty%2Fpdns.git speed up dedup code, use less memory --- diff --git a/pdns/dnspacket.cc b/pdns/dnspacket.cc index af6af8ea66..c3e3b35bf5 100644 --- a/pdns/dnspacket.cc +++ b/pdns/dnspacket.cc @@ -186,13 +186,14 @@ void DNSPacket::addRecord(const DNSZoneRecord &rr) if(d_compress) { std::string ser = const_cast(rr).dr.d_content->serialize(rr.dr.d_name); - if(d_dedup.count({rr.dr.d_name, ser})) { // might be a dup + auto hash = boost::hash< std::pair >()({rr.dr.d_name, ser}); + if(d_dedup.count(hash)) { // might be a dup for(auto i=d_rrs.begin();i!=d_rrs.end();++i) { if(rr.dr == i->dr) // XXX SUPER SLOW return; } } - d_dedup.insert({rr.dr.d_name, ser}); + d_dedup.insert(hash); } d_rrs.push_back(rr); diff --git a/pdns/dnspacket.hh b/pdns/dnspacket.hh index 3264855e4e..9d421e3560 100644 --- a/pdns/dnspacket.hh +++ b/pdns/dnspacket.hh @@ -175,7 +175,7 @@ private: string d_tsigprevious; vector d_rrs; // 8 - std::unordered_set, boost::hash< std::pair > > d_dedup; + std::unordered_set d_dedup; string d_rawpacket; // this is where everything lives 8 EDNSSubnetOpts d_eso;