This is a very generic question:) however here are some guidelines
1- Measure startup time for your app, if startup is a big concern for your customers, consider using Ngen service, using ngen service (ngen.exe) have a considerable performance for Cold startup
2- Workingset and GC heap: what does your gc heap look like; specially your LOH. LOH in CLR is not compacted, so it is important to keep LOH small, or to use caching techniques to reuse objects in LOH ( Large Object Heap holds object that are larger than 85000 bytes ).
3- Throughput : How many operations you can do, what is the response time for your app if it it has a user interface, how many requests it can handle if it is a server app ..etc
Regarding Diagnostics and Tracing, you can use classes in System.Dignostics namespace ,like TraceListner, you can also consider ETW events for your critical code paths (Event Tracing For Windows in MSDN has a good reference ).
You can build your own custom dignostic classes on top of the built in classes in System.Dignostics namespace.
A couple of very useful tool that you need to have in your grab bag is VS Profiler, and CLR profiler for time profiling and memory profiling respectively.
You can use a profiler to have a general high level idea about your hot functions, you can use StopWatch class to measure the time for some selected methods, or for high resolution timing, you can use QueryPerformanceCounter and QueryPerformanceFrequency windows APIs