2012-07-02 2 views
0

ASP.NET C# 응용 프로그램을 작성 중이며 작업 성능을 향상시키고 자합니다.json 문자열을 얻는 ajax 호출의 성능을 향상 시키십시오.

내가 가진 것은 버튼입니다. 사용자가 클릭하면 데이터베이스에서 데이터를 가져 와서 데이터를 표시하는 Ajax 호출을 보냅니다.

데이터베이스의 스키마는 다음과 같이이다 :

Database schema

나는 국가의 목록을 가지고, 각 국가는 여러 시리즈를 가지고 (인구, 기름, 물 ....)와 각 시리즈는 여러가 년 (매년 가치가 있음). 그래서 기본적으로 그 년의 foreach 국가를 통해 시리즈의 진화.

데이터 가져 오기 AJAX를 사용하여 웹 서비스를 호출합니다. webservice는 시리즈 이름을 입력으로 받아들이고, 나는 모든 년간 모든 coutry에 대한 해당 시리즈의 데이터를 출력으로 필요로합니다. 출력 데이터는 다음과 같은 자바 객체 여야합니다.

워터 = { "1990": { "미국": 0.1, "캐나다": 0.3, "오스트레일리아": 0.4}, "1991" 미국 "0.1"캐나다 ": 0.5}}

AJAX 호출 :

 $.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); 
       } 
      }); 

서비스 사용 엔티티 프레임 워크는 데이터베이스에서 읽을 수 있습니다.

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 
              }); 

yearClass는 여기에서 사용하기 위해 강력한 유형화 된 유형입니다.

그런 다음 모든 연도를 반복하고 원하는 형식과 일치하도록 문자열을 연결하여 JSON을 작성합니다.

그러나이 프로세스는 많은 시간을 이야기하고 있으며 성능을 향상시킬 방법을 찾아야합니다.

어떤 부분을 개선 할 수 있습니까? 어떤 조언을 크게 주시면 감사하겠습니다.

+1

어떤 프로세스가 "많은 시간"을 보냅니 까? 귀하의 게시물에서 확실하지가 않습니까? – spender

+0

잘 모르겠습니다. 버튼을 클릭하면 응용 프로그램이 4 초 동안 정지 한 다음 데이터가 표시됩니다. 어떤 부분이 가장 많은 시간을 말하고 있는지 어떻게 알 수 있습니까? – Youssef

+0

나는 성능 저하의 대부분이 색인을 만들 수 있다고 말할 것이다. 이름 열의 색인, 코드. 다음은 첫 번째 요청이 매우 길다는 것이 정상입니다 (4 초라고 말했듯이). – VikciaR

답변

0

직접 JSON을 생성하지 마십시오. 올바른 특성을 가진 객체 그래프를 구성한 후에는 컨트롤러 동작에서 Json() 함수를 사용하여 JsonResult으로 반환하십시오. JSON.net과 같은 써드 파티 JSON 시리얼 라이저를 사용할 수도 있습니다.

+0

어디에서 MVC가 표시됩니까? WebService.asmx는 기존의 오래된 웹 서비스를 사용하고 있음을 보여줍니다. – VikciaR

+0

좋은 지적. 웬일인지 나는 그것을 놓쳤다. 오 잘 :) 나의 나쁜. –

관련 문제