NGEN is the tool for generating machine code. However, in some cases NGEN can cause code to be less optimized than if you used JIT. Mainly because JIT can take advantage of processor model specific instructions, whereas NGEN creates code for a family of processors. Also, NGEN complicates the deployment process because you have to deploy the NGEN images to a special location instead of just copying your exe's and dll's locally. Most of the benefits of NGEN are in startup time because the JIT penalty for each method only happens once.
The bottom line: Profile your application using JIT and NGEN and see which option is best.
Some useful links:
http://msdn.microsoft.com/en-us/magazine/cc163610.aspx[
^]
http://msdn.microsoft.com/en-us/magazine/cc163808.aspx#S2[
^]