How to deal with rendering a huge number of characters?

It can be a good idea to split the simulation by CrowdField, and to use the Camera Frustum optimization.

You can find the detailed procedure here.