1.It’s not quite normal to maintain an instance for every form in your application at the same time. The users never use them at the same time; instead they usually use a small portion of them within a certain period of time.
The first option you can use to optimize your application is using “lazy initialization”, which means you do not create an instance of a form until it is being accessed.
Another option is applying some kind of caching policy. For example, you can choose to maintain a maximum of 10 form instances which are most lately (or frequently) accessed; or you can dispose a form after it hasn’t been used for a certain period of time.
2.Using switchable user controls should save some memory, though I don’t think the difference is significant, so maybe you can just choose the one you are more familiar with. Whatever way you choose, you need to make a compromise; and the Remote Performance Tool will help you in this regard.
Besides, there is a Compact Composite UI Application Block included in the Mobile Client Software Factory which aims to help you build a better UI. You don’t have to use it but the guidelines might be helpful to you: