4.5 seconds is pretty awesome. If you use EF, you can use MiniProfiler.EF
I had some slowdown (in the past) by misusing the Entity Framework Queryable (converting it to lists, extension, ...).
If you use EF, keep it IQueryable as long as possible (.ToList () executes the query).
According to your needs, use debugging tools like MiniProfiler, MiniProfiler.Ef and other suggested tools are probably good too (although I haven't used them in the past).
Serialization costs can be important (if the OU uses DTO), AutoMapper (and possibly other tools) seems slow on large lists. I would suggest manually matching them in the extension method if you really need performance on large lists.
Nicojuicy
source share