I've been working on my game for quite a while now, and when I finally pulled the trigger and became a Unity Pro dev I discovered a hugely disconcerting issue when I fired up the profiler. NGUI was the single biggest CPU consumer in my code. Yikes!
So here's what I did to mitigate the amount of overhead that NGUI was adding to my app.
1. Only Make NGUI Elements Active When They Need To Be
- You can parent widgets under different NGUI panels. If the widget is static (not animating, not scaled, not moving) then keep it parented under an NGUI panel that is tagged as static/unmoving. If the element needs to become dynamic (it has to scale or animate or whatever) then either have a transitory element that replaces the static element which is parented under a dynamic panel *OR* move the static element from a static panel to a dynamic panel for ONLY AS LONG as it needs to update. Then switch back to, or move, the static element back to the static panel.
- Changing the parent is somewhat CPU intense, but it's far less intense than leaving the element parented to a dynamic panel, and you can use a simple local script to swap parents based on the timeout of an effect.
2. NGUI wants to update every component on every frame. That turns out to be a huge amount of overhead.
- If you're using NGUI for UI in a game with high-speed updates then it's chewing up a LOT of CPU. There's no default mechanism that lets you control how often NGUI updates panels - as written it updates on every frame and there's no way to change that behavior.
- My solution was to tweak NGUI's code so that you can choose to disable the per-frame updates and restrict widget updates to 1/16th of a second (which is the minimum of human persistence-of-vision). This change improved my overall frame rate from 15FPS to 60FPS on current IOS hardware. Wow!
- I also set the update time to an initially random period so that updates to specific panels wouldn't occur on the same frames (mostly, since the random period is... well... random). Thus far, things are distributing fairly evenly and working well.
If you're using NGUI this info hopefully helps you get your project running faster. Fingers crossed that some of these optimizations find their way into products in the future

Nick