Hi Dave,
The grid was being re-rendered after add new row and copy/paste to add a blank row in the end of grid, but in case of copy/paste batch operation it should run once, so that code is moved out of addNewRow(...) and put into a function grid.addBlankRow() and called separately for copy/paste after batch operation is completed.
Now copy/paste with 10k records took 2 seconds.
Please find attached patch.