• Tom Lane's avatar
    Improve ResourceOwners' behavior for large numbers of owned objects. · cc988fbb
    Tom Lane authored
    The original coding was quite fast so long as objects were always
    released in reverse order of addition; otherwise, it degenerated into
    O(N^2) behavior due to searching for the array element to delete.
    Improve matters by switching to hashed storage when the number of
    objects of a given type exceeds 64.  (The cutover point is open to
    discussion, of course, but some simple performance testing suggests
    that hashing has enough overhead to be a loser below there.)
    
    Also, refactor resowner.c so that we don't need N copies of the array
    management code.  Since all the resource IDs the code currently needs
    to deal with are either pointers or integers, it seems sufficient to
    create a one-size-fits-all infrastructure in which everything is
    converted to a Datum for storage.
    
    Aleksander Alekseev, reviewed by Stas Kelvich, further fixes by me
    cc988fbb
resowner.c 34.8 KB