I think that first you need to define what you are looking for. For example if your application is slow due to slow I/O, you'll might want to check (among other things) which queries cause the most I/O operation. On the other hand if you have a blocking issue, you'll want to check which queries are at the head of the blocking chain. For each one of those things you'll need a different approach and different queries, so first you'll need to decide what problem you want to solve (High CPU, High I/O operations, memory pressure, blocking etc') and then you have to decide how to get the needed information.
Having said that my favorites tools are – Profiler/server side trace, using sys.dm_os_waiting_tsks and sys.dm_os_wait_stats to see why something is slow, using dm_exec_query_stats in order to find out statistics about query plan that are in the cache.