Ali RAN
Ali RAN

Reputation: 563

ASP.NET Web API performance issue

I have a simple Web API that returns the list of contacts:

public class ContactsApi : ApiController
{
    public List<Contact> GetContacts()
    {
        Stopwatch watch = new Stopwatch();
        watch.Start();
        // Doing some business to get contacts;
        watch.Stop();
        // The operation only takes less than 500 milliseconds
        // returning list of contacts
    }
}

As I've used Stopwatch to test data-retrieval performance, it's apparent that it takes less than a second. However, when I issue a request to the GetContacts action via Chrome browser, it takes 4 to 5 seconds to return data.

enter image description here

Apparently that delay has nothing to do with my data-retrieval code. It seems to me that Web API is running slow. But I have no idea how to debug and trace that.

Is there any utility to log timing for ASP.NET HTTP request process pipeline? I mean, something like Navigation Timing to show that each event has occurred in what time?

Upvotes: 8

Views: 6673

Answers (4)

NicoJuicy
NicoJuicy

Reputation: 3528

4.5 seconds is pretty huge. If you use EF, you could use MiniProfiler.EF

I experienced some slowdown ( in the past) by incorrectly using Entity Framework Queryable ( converting it to lists, expanding, ...).

If you are using EF, keep it IQueryable as long as possible ( .ToList() executes a Query).

According to your needs, use debugging tools like MiniProfiler, MiniProfiler.Ef and tools other suggested are probably good too ( although i haven't used them in the past).

The cost of serialization could be important ( if ou are using DTO's), AutoMapper ( and probably other tools) seems slow on large lists. I'd suggest manually mapping them in an extension method, if you really want performance on big lists.

Upvotes: 0

Konrad Kokosa
Konrad Kokosa

Reputation: 16878

How big is your response? Maybe it is a cost of serialization and transfer? However, there is a lot of possibilities to profile it, I would start from profiling with one of the tools in the market like ANTS Performance Profiler or dotTrace

Upvotes: 5

Jakob Boman
Jakob Boman

Reputation: 46

Are you running it with the debugger? Do some tests without the debugger. I had similar problems with a web API project I am currently developing and for us turning off the debugger made the test take milliseconds instead of seconds.

There also seems to be some startup cost when calling a API the first time, subsequent request are always faster.

Upvotes: 2

Manoj
Manoj

Reputation: 634

Try using Fiddler (http://fiddler2.com/), a free web debugging tool. It has most of the features that you are looking for.

Upvotes: 0

Related Questions