Randolph West explains why optimize for ad hoc workloads
should be enabled by default:
Enabling the optimize for ad hoc workloads configuration setting will reduce the amount of memory used by all query plans the first time they are executed. Instead of storing the full plan, a stub is stored in the plan cache. Once that plan executes again, only then is the full plan stored in memory. What this means is that there is a small overhead for all plans that are run more than once, on the second execution.
Read the whole argument. I don’t know that I’ve seen an instance yet where this setting was a really bad choice.