I'm sorry my english
there are many 1.Application_BeginRequest (and AuthenticateRequest) in the global or some HttpModule
2.filters
3.mvc framework, factory controller, action invoker, etc.
4. When the first time it starts, it cost many to compile il for the native
I think you can use a stopwatch to check how much time was spent executing the code in your action so that you can find out where the point takes a lot of time.
120 ms is not the time to spend before the action starts, I think the time has come to take the action
By the way, 120ms is not so bad
update
public ActionResult Index() { var profiler = MiniProfiler.Current; using (profiler.Step("action")) { return View(); } }

this result is higher than the result of running the code so you can see the action - the child only costs 1.9
and http: // ...... cost 302, it includes the controller, action
therefore, you should check the high cost of time inside your action code or outside your action code
in pic, it costs 300+ because it is the 1st run, the 2nd run is just a cost of 4
1st run should be slow
source share