2014-02-18 17 views
0

У меня есть веб-сервис WebAPI. Я возвращаю строку Json. Контроллер возвращает ActionResult, но я также попытался сделать его JsonRequest. Это не влияет на результат.ASP.NET MVC JsonResult Очень медленно

Вот соответствующий код (имея в виду, что прототип функции просто возвращает ActionResult:

 Debug.WriteLine(string.Format("{0} - get campaign data: {1}", DateTime.Now.ToString("hh:mm:ss.fff"), 1)); 

     // Here is the data we're going to need 
     var currentUser = context.Users.Where(n => n.UserID == userId).Single(); 
     var locations = context.Locations.Where(n => n.CampaignID == campaign.CampaignID && n.Inactive == false); 
     var questions = context.Questions.Where(n => n.CampaignID == campaign.CampaignID && n.Inactive == false).Include(n => n.QuestionType).ToList().OrderBy(q=> q.SortOrder); 
     var dispositions = context.Dispositions.Where(n => n.CampaignID == campaign.CampaignID).ToList().OrderBy(d=> d.SortOrder); 
     var answers = context.Answers.Where(a => a.Inactive == false).Join(locations, answer => answer.LocationID, loc => loc.LocationID, (ans, loc) => ans).ToList(); 
     var contacts = context.Contacts.Where(c => c.Inactive == false); 

     Debug.WriteLine(string.Format("{0} - get campaign data: {1}", DateTime.Now.ToString("hh:mm:ss.fff"), 2)); 

     var json = new 
      { 
       success = true, 
       data = new 
       { 
        User = currentUser.ToModel(), 
        Campaign = campaign.ToModel(), 
        Location = locations.ToList().ToModelsSpecial(answers, contacts), 
        Question = questions.OrderBy(q => q.SortOrder).ToModelsSpecial(), 
        Disposition = dispositions.ToModels(), 
       }, 
       message = (string)null 
      }; 

     Debug.WriteLine(string.Format("{0} - get campaign data: {1}", DateTime.Now.ToString("hh:mm:ss.fff"), 3)); 
     var response = Json(json, JsonRequestBehavior.AllowGet); 
     Debug.WriteLine(string.Format("{0} - get campaign data: {1}", DateTime.Now.ToString("hh:mm:ss.fff"), 4)); 

     return response; 

Вы можете видеть, у меня есть Debug.WriteLine для отладки, которая выводит, сколько времени требуется, чтобы я мог отслеживать его.

Таким образом, проблема в том, что вся обработка, включая запросы БД занимает около 2 секунд. Он получает всю дорогу через всю эту вещь в то время.

И все же я не получаю результат на клиенту еще 25 секунд. я использую программу, такую ​​как Fiddler, чтобы проверить это. Это все на моей локальной машине, поэтому интернет не проблема.

Размер возвращаемой строки Json составляет 800k. Поскольку это все локально, я не ожидал, что это займет 25 секунд.

Я бегу сайт в IIS8 на Windows 8.

Может кто-нибудь сказать мне, что так долго для ActionResult, чтобы вернуться к клиенту?

+0

, который использует этот вызов - jquery ajax call или какой-либо другой клиент? – Newse

+0

Мне интересно, как данные визуализируются. Повторное добавление тысяч строк в таблицу html может легко замедлить работу браузера до craw, если эта таблица прикреплена к DOM. – JayC

ответ

0

Взгляните на это сообщение. Я считаю, что у Вас есть один и тот же вопрос, и исправление было просто заменить плагин:

Struts2+jsonplugin: response takes a long time to display in browser from remote server

+0

Спасибо за отзыв. Я посмотрел на это, и я не думаю, что это одно и то же. – user856232

+0

После дальнейшего изучения, Fiddler будет вызывать дополнительные накладные расходы при отладке кода. Если проблем не существует, попробуйте отключить отладку в скрипте, а затем запустить его без использования скрипача. Это должно дать вам лучшее представление о том, вызывает ли отладка увеличенный таймфрейм. – James

+0

Имейте в виду, что в любое время, когда вы отлаживаете код, процесс приведет к огромному количеству накладных расходов в системе, и это может привести к тому, что код будет сканироваться/выполняться более одного раза. Дайте мне знать, если у вас все еще есть проблемы при запуске за пределами отладки/скрипача. Но из того, что я вижу на данный момент, это просто проблема с накладными расходами. – James

0

Я мог бы увеличить скорость моей функции Json только тогда, когда возвращал строку вместо JsonResult. Я не понимаю, почему, но это было намного быстрее. Может быть, потому что это меньше конверсий. Я использую mvc 5, попробовал со старой версией, но не смог вернуть строку только JsonResult.

public String GetBooks() 
    { 


     var myBooks = db.Books(); 

     JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 


     return (jsonSerializer.Serialize(myBooks)); 


    } 
Смежные вопросы