What is the fastest way at runtime? instantiate? moving in/out camera? activate/deactivate?

I’m trying to create a infinite game for iOS that just keeps loading in level blocks at runtime.I have about 40 level blocks as prefabs ( each prefab has about 10 empty object with colliders ) that needs to be loaded in during the gameplay.

I first tried Instantiate/destroy but I was getting a bad lag. After that, I tried instantiating the prefabs at start and using SetActiveRecursively() to activate/deactivate prefabs, but ended up with pretty much same result. I’ve also tried to keep prefabs out of camera, move them in when needed and move them back out. So far, this seems to be the fastest but I’m afraid how it’ll perform later when I have all 40~50 prefabs ready and have them in the scene all the time.

What would be the best way? Is there any other/better way to do this?

Thank you in advance.

thanks for answering my question about moving being being faster than instantiating. I figured so much but I wanted to make sure. Instantiate means you have to write all the info and references to memory, texture, name, tag and then clear the memory and put a new one. meeting means all the info is already in memory, you just have to rewrite the position which is very fast. You should try and access the game objects from a built an array. Also you should try and use coroutine functions all with different timings so that all the processing happens a little bit every frame rather than large chunks at a time. there is also ways to use multithreading in unity.
not for mobile platforms> Multithreading and messaging - Questions & Answers - Unity Discussions