As @Cringer says, you should clean up on each iteration of the loop. Right now there are n - 1 blobs of memory leaking. That entails adding a ON ERROR UNDO, THROW phrase to the DO block and moving the FINALLY block inside the DO.
I would also be careful of buffer scope with the static method...