asp.net MVC和$就额外的性能开销(asp.net MVC and $.ajax added

2019-06-26 10:47发布

我曾经跨越的性能差一个很好奇的问题时绊倒asp.net的MVC控制的jQuery $就功能调用。 控制执行数据库的行动,需要403ms,但总$就调用根据萤火虫,这是相当多的额外开销是3400ms。 我需要优化性能,但哪里这方面的开销来自我不清楚。

下面是代码。 在我的控制器,我有

 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;

}

在我的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;
}

另需注意,当数据库调用被移除,我手动填充物,表现是超级快。

这似乎从403ms去3400ms是完全错误的,并显然有不合理开销。 能否请你指出正在做什么错在这里? 这是很简陋,我真的不能避免前往该数据库。

我试着具有控制返回空集(ActionResult的),而不是JsonResult但它有同样的问题。

这是asp.net MVC问题? 提前致谢

编辑补充

我也有一个返回里面的Excel文件并具有完全相同的数据库操作的动作。 该文件回来在410ms,而不是使用$就功能。 看来,$就以某种方式造成了延误。 所有我需要的是从数据库中获取数据,通常它的速度非常快。

我添加了控制器代码里面,因为有人问它,但我要重复的是,里面(是控制器的呼叫内的总)需要403毫秒。 显然,这个问题是不是在服务器或数据库调用。 在我看来,这是客户端和服务器之间。 任何帮助吗?

万一有人决定帮我1)在Firebug中花了使用Action GetResults是3.54s张贴总时间。 2)当我导航到NET->所有萤火虫,其中该请求的击穿列出我看到最大的时间花费在等待(3.5秒)。

看来,3.5秒 - 服务器和客户机之间通信时403ms的时间度过的,但在那里,为什么?

Answer 1:

我发现这个问题,这个问题与数据库调用是。 然而,我在第一误导的原因在于,计算所述时间差的一段代码。

DateTime start = DateTime.Now;

SearchResult myReportsResult = _repository.GetResults(searchCriteria);  


DateTime got_it = DateTime.Now; 
TimeSpan diff = (got_it - start);
int diff_ms = diff.Milliseconds;

此代码没有给我正确的毫秒数。



文章来源: asp.net MVC and $.ajax added performance overhead