SetActiveRecursively() causes time-lag on mobile devices

The GUI of my project is made of 3D-objects, I don´t use any 2D-GUI there.
The GUI has three tabs, Tab1 is Camera-Buttons, Tab3 contains Tools and Tab3 has App-Settings.

Every tab has some 3D-Buttons, 3D-checkboxes or 3D-Sliders.

When switching between the tabs the corresponding gui-objects get activated (visible) and the other tabs objects get deactivated (invisible) all using SetActiveRecursively().

That all works nice and looks cool, but there´s a noticable lag when switching between the tabs on Android / iPad2.

The app is running smooth as Executable.

Why?
How can I avoid this?
Is there a better way instead of using SetActiveRecursively() ?

You can cache the objects you are activating to save having to search a deep heirachy each time.

Activating complex colliders can be slow on mobile so instead you can move them off screen which doesn’t take any time at all.

Moving offscreen sounds good!
Could you give me a hint how to cache these objects?

If you’re moving the gui offscreen you can probably leave them activated but if you want to create an array of gui objects and their children you can loop through the children with Transform.GetChild() or drag and drop in the inspector.