2012-07-02 4 views
0

Я работаю над приложением ASP.NET C#, и я ищу, чтобы улучшить производительность действия.Увеличьте производительность вызова ajax, который получает строку json

У меня есть кнопка, когда пользователь нажимает на нее. Я посылаю вызов Ajax для получения данных из базы данных и отображения данных.

Схема базы данных, как это:

Database schema

У меня есть список стран, каждая страна имеет несколько серий (Контингент, масло, вода ....) и каждая серия имеет несколько лет (каждый год имеет значение). Таким образом, в основном это эволюция серии за годы своей страны.

Чтобы получить данные, я использую AJAX для вызова веб-сервиса. Вебсервис принимает в качестве ввода название серии, и мне нужно как выход данных этой серии для каждой coutry на протяжении всех лет. Выходные данные должны быть объектом Javascript, который выглядит следующим образом:

Вода = {"1990": {"США": 0,1, "Канада": 0,3, "Австралия": 0,4}, "1991": {" США»: 0,1, "Канада": 0,5}}

Аякса вызов:

 $.ajax({ 
       type: "POST", 
       url: "Service/WebService.asmx/GetData", 
       dataType: "json", 
       async: false, 
       data: "{'Series':'" + Series+ "'}", 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        mapValues = JSON.parse(data.d); 
       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        alert(errorThrown); 
       } 
      }); 

использование Entity Framework службы для чтения из базы данных.

var Context = new DataModel.DBEntities(); 
IEnumerable<YearClass> r = (from y in Context.Years 
              where y.Series.Name == Variable 
              select new YearClass 
              { 
               year = y.Name, 
               value = y.Value, 
               CountryCode = y.Series.Country.Code 
              }); 

годКласс представляет собой строго типизированный тип, чтобы использовать его здесь.

Затем я прохожу через все годы и создаю JSON, объединяя строку, соответствующую желаемому формату.

Однако этот процесс говорит много времени, и мне нужно найти способ увеличить его производительность.

Какую часть можно улучшить? любые советы приветствуются.

+1

Какая часть процесса занимает много времени? Это не ясно из вашего поста? – spender

+0

Я не уверен. Когда я нажимаю кнопку, приложение замораживается в течение 4 секунд, тогда я получаю данные. как я могу узнать, какая часть говорит больше всего времени? – Youssef

+0

Я бы сказал, что большая часть снижения производительности может делать индексы: index на столбце Name, Code. Далее, для первого запроса, как правило, очень много (как вы сказали, 4 сек). – VikciaR

ответ

0

Не генерировать JSON самостоятельно. После того, как вы построили свой графический объект, который имеет правильные свойства на нем, верните его из действия вашего контроллера как JsonResult с помощью функции Json(). Вы также можете использовать сторонний сериализатор JSON, такой как JSON.net.

+0

Где вы видите MVC? WebService.asmx показывает, что используются традиционные старые веб-сервисы. – VikciaR

+0

Хорошая точка. По какой-то причине я пропустил это. О, хорошо :) Мой плохой. –

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