When the mempool fills the verbose getrawmempool
RPC call gets really slow. It can take minutes for >100k transactions in the mempool.
The culprit is the univalue library. Objects are implemented as a big list, but the library checks for duplicate keys. So inserting n key-value pairs into an object takes O(n^2).
Possible fixes:
- Improve univalue library by using linked hash maps.
- change the RPC output format of getrawmempool to use a list of objects, instead of an object of objects. But this breaks existing code.
- hack the library to be able to skip the duplicate check.