For extreme speed you could sample all your animation cycles to independent (static) meshes and parent them all to a pivot which hides / shows the current frame. Pretty expensive on vertex memory with 250 keyframes of a 500 vert model taking I would guess something like 4 megabytes per model but would be very fast if you are prepared to drop tweening.
Also, the idea of timing rendering is possibly not as simplistic as you assume. Unless you are locking the back buffer in some way before sampling the time, the time after a call to RenderWorld is meaningless in relation to how far the GPU is along it's buffered draw list.
Also, the idea of timing rendering is possibly not as simplistic as you assume. Unless you are locking the back buffer in some way before sampling the time, the time after a call to RenderWorld is meaningless in relation to how far the GPU is along it's buffered draw list.