Do you know there is a compiler switch which can calculate the time it takes to do the compilation of file(s) you pass it? You can use it by passing "/time" to the C# compiler. This results in the output of the "elapsed time". The page on msdn titled "C# Compiler Options Listed Alphabetically" (ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/ dv_cscomp/html/43535ea0-ca47-4a15-b528-615087a86092.htm, this is whidbey beta1 msdn link [and is deliberately broken!!!]) does not list this switch, neither does it exists in the list if you write "csc /?" at the windows console (csc of v1.1.4322). You can find its code in the Rotor file sscli\clr\src\csharp\scharp\scc\scc.cpp. Additionally some interesting code relating to timing can also be found in the file sscli\clr\src\csharp\scharp\sccomp\timing.cpp. The comments on the timing.cpp file reads: "Defined the timer functions, which allow reporting performance information for the compiler. This is sort of a built-in mini-profiler that is always available. This allows anyone to do a quick investigation of performance problems and try to pinpoint where things have changed."
The "/time" switch works both in commercially available .net from Microsoft as well Rotor, but I could not find it working in Mono (mcs 126.96.36.199).