Which is more efficient? duplifaces, particles, or group instances? Particles give more controls for doing things like randomizing rotation of instances, but duplifaces and group instances allow for rotation and scale of individual instances.

For something like creating a forest with a lot of trees, is it more efficient to use a particle system? Or a dupliface object?

What is the most efficient way to instantiate a large number of objects?



By "efficient" I mean in terms of rendertime/memory usage.
I do not know the specifics of Blender's implementation. But, it seems to me, they would use the exact same algorithm in both cases. With particle instancing, you have a position vector and a transformation matrix for each particle. The only difference with dupliface is the position vector is determined by an object's face, rather than a particle.

So, memory is going to be the same. Render time should be the same, unless you're using extra features. For example, you can have objects deform along a particle's path when using particle instancing. The deformations would take extra time to compute when rendering.