WinForms applications sometimes take up a lot of memory for JIT, memory that isn’t needed once your application gets going.
You can reduce the amount of memory being used by shrinking the working set. Use the following code at the end of your form’s Load and Deactivate events:
int minsize = 500000; // ~500k
int maxsize = 800000; // ~800k
System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();
p.MaxWorkingSet = (IntPtr) maxsize;
p.MinWorkingSet = (IntPtr) minsize;
Note that you won’t get all the way down to these levels, but it’ll help. Also note that this may have a performance impact if your app really does need all this memory, so you may want to play around with the values & using it for some forms or not.
You can get more info on MSDN.