That is exactly what I'm doing. It is necessary to clear and reload the global array if a subnet is added or deleted, but not when it is aged (as part of the route expiry system) or the gateway next-hop address is changed.
After sleeping on it (and discussing it with my cat), I've come to the conclusion that after deleting an old entry from the subnets routing table, it is only necessary to make a second pass down the entire subnets structure to clean up the resulting loose ends. That would add another 3ms to the load processes, but completely negate the need to zero the whole addrs map array, thus saving 25ms. I'll look into giving this a try.
The stats page now displays route table load and lookup times. - Brian