Geometry is internally converted to BufferGeometry. This is normally done once but since you are setting elementsNeedUpdate to true in your render loop, the conversion is performed every frame.
Also see: Potential memory leak in my animation engine
Try to avoid Geometry and generate your geometry data with BufferGeometry instead. You will have a much better performance.