Don't zero-initialize the cells of freshly allocated rows
Don't zero-initialize the cells of rows re-used from the scrollback
Free rows from the old grid one by one "as we go", rather than all at once at the end
The first two points directly affect the time it takes to reflow the grid; zero-initializing new rows is completely unnecessary since they'll immediately get overwritten. There are two exceptions to this: one, rows with a hard line break. Here we need to "manually" clear the remaining cells when we insert the line break. Two, the last row may only be partially written. Here too, we need to clear the remaining cells.
The last point reduces our memory foot print, as we no longer need to hold both the old and the new grid, in their entirety, in memory at the same time. May also improve performance due to slightly better cache behavior (but I doubt it).