I guess it depends a bit what result you need/want.
In theory you could just do all the calculations, which seems to be the expensive part, save that in memory, or even allow it to export, so you could reuse it later.
Then "play back" the information in real-time. So effectively you end up with two separate components, one that does the computation and one that does the displaying.
The same method could also be used to dump the information as images to disk, from which you can then create a video (e.g. with ffmpeg).
Alternatively, you could also dump the images in "real-time" as in, whenever the next frame is ready.
What's not clear to me, is whether the rendering performance drops due to the amount of particles, or whether it's really the calculation that slows down the rendering. For the former part, there might also be rendering optimization that could be done. For the later, you'd have to find more efficient calculations, e.g. with a proper math library.