One thing that isnt mentioned in the other forum is linked duplicates & dupligroups & modifiers
Should just mention instancing and linked duplicates mean the same thing
So, If ever you duplicate something in blender which is essentially the same but just in a different location / rotation / scale. always. ALWAYS use alt d instead of shift d. This means that the vertices behind the object are linked, so it stores it once in memory when rendering. If there is a modifier on a object that you aren instancing around, and the modifier is also the same over all the objects, apply the modifier. Why? because no matter what, if there is a modifier on the objects, it removes the instancing benefits.
When you copy / paste between scenes, make sure that you are copying all the linked objects together, otherwise each copy paste will remove the instancing and create unique objects when bringing it in.
Finally. the big one. Even though they are linked. In the blender viewport, it will load everything which can be edited directly, up into ram. Which means if you have 5x2million poly objects. whilst at rendertime it is only loading up 2million into ram, the full 10million will be stored into system ram for the viewport. I suspect this is the reason for your crashes.
Now. There are a couple of ways around this. Converting the object to dupligroups will make it not editable, but you will be able to see it in the viewport, save on system ram, and gpu ram. This is how we are able to load the scene up with billions of polygons and still be able to work in the scene.
If there are loads of these high poly objects scattered around in a random configuration, particle system -> hair -> object duplication is the most efficient way.
It should be noted, that whilst your scene may be able to open the viewport speed may suffer immensly… the only way around this is to change the object display to wireframe / bounding box. ifyou donit need to see it and its high poly, i highly recommend this.