asp.net MVC i $ .ajax zwiększyły wydajność

Natknąłem się na bardzo ciekawy problem niskiej wydajności, gdy formant MVC asp.net jest wywoływany przez funkcję jquery $ .ajax. Kontrolka wykonuje akcję bazy danych, która zajmuje 403 ms, ale całkowite wywołanie $ .ajax wynosi 3400 ms zgodnie z Firebug, co jest dość dużym dodatkiem. Muszę zoptymalizować wydajność, ale nie jestem pewien, skąd pochodzi ten narzut.

Oto kod. W moim kontrolerze mam

 public JsonResult SetSearchResults(Criteria searchCriteria)
 {

       SearchResult myReportsResult = _repository.GetResults(searchCriteria);    

       //the statement above takes 403 ms

       return Json(myReportsResult);
  }





 public  SearchResult GetResults(SearchCriteria searchCriteria)
  {
        SearchResult result = SearchResult();

         DataTable dbResults = _da.GetDBResults(searchCriteria);       


        List<IncidentReportHeader> irs = new List<IncidentReportHeader>();            

        for (int i = 0; i < dbResults.Rows.Count; i++)
        {
            IncidentReportHeader ir = new IncidentReportHeader();

            //populate all the properties of the ir object here,                

            irs.Add(ir);
        }

        result.Reports = irs;       
        return result;        
}

    //models
    public class SearchResult
    {

        private List<IncidentReportHeader> _res;
        private int _numOfPages=0;
        private int _recordsPerPage=0;

        public List<IncidentReportHeader> Reports {
            get { return _res; }
            set
            {
                _res = value;              
            }        
        }           


        public SearchResult()
        {
            _res = new List<IncidentReportHeader>();
        }
    }
}




//db call
   public DataTable GetDBResults(SearchCriteria searchCriteria)
       {
         //add all params to the db object needed for the stored procedure here



            DataTable dt = _db.ExecuteStoredProc("myDB.PACKAGE_NAME.stored_proc", 2000, ref  _spParams, ref _spResultVariables);
           return dt;

}

w moim JS

function SearchIncidentReports() {

    //pack the  searchCriteria object here
    var searchCriteria = ...

    var start = new Date().getTime();

    $.ajax({
        contentType: 'application/json, charset=utf-8',
        type: "POST",
        url: myController/SetSearchResults,
        data: JSON.stringify({ searchCriteria: searchCriteria }),
        cache: false,
        dataType: "json",

        success: function (response) {

            var got_data = new Date().getTime();
            var diff1 = got_data - start;
            alert("data loaded in: " + diff1 + " ms");

             // do whatever you need with the data here.  
             // diff1 = 3400ms which is what Firebug shows too

        },

        error: function (xhr, ajaxOptions, thrownError) {
            var result = $.parseJSON(xhr.responseText);
            alert(result.ErrorMessage);
        }

    });
    return false;
}

Kolejna uwaga: po usunięciu wywołania bazy danych i ręcznym wypełnieniu obiektu wydajność jest bardzo szybka.

Wydaje się, że przejście od 403ms do 3400ms jest po prostu błędne i wyraźnie ma nieuzasadnione koszty ogólne. Czy możesz wskazać, co tu się dzieje źle? To całkiem nagie kości i naprawdę nie mogę uniknąć przechodzenia do bazy danych.

Próbowałem, aby Kontrola zwróciła pusty zestaw (ActionResult), a nie JsonResult, ale miał ten sam problem.

Czy jest to problem z MVC asp.net? z góry dziękuję

EDYCJA DO DODAJ

Mam także akcję, która zwraca plik Excela i dokładnie taką samą operację na bazie danych. Plik powraca w 410ms i nie używa funkcji $ .ajax. Wygląda na to, że $ .ajax powoduje jakoś opóźnienie. Wszystko, czego potrzebuję, to pobrać dane z bazy danych i zwykle jest to bardzo szybkie.

Dodałem wnętrze kodu kontrolera, ponieważ ktoś go o to poprosił, ale powtórzę, że wnętrze (tak, całkowite wewnątrz wywołania kontrolera) zajmuje 403 ms. Oczywiście problem nie dotyczy połączenia z serwerem lub bazą danych. Wydaje mi się, że jest między klientem a serwerem. Jakaś pomoc?

Na wypadek, gdyby ktoś zdecydował się mi pomóc 1) W Firebug całkowity czas potrzebny na POST przy użyciu Action GetResults wynosi 3,54s. 2) Kiedy przechodzę do Net-> All in Firebug, gdzie znajduje się podział żądania, widzę, że największy czas spędza się na czekaniu (3.5s).

Wydaje się, że 3,5s - 403ms czasu spędza się podczas komunikacji między serwerem a klientem, ale gdzie i dlaczego?

questionAnswers(1)

yourAnswerToTheQuestion