2014-06-07 2 views
2

Api에 액세스 할 때 35 MB Json의 큰 덩어리를로드하는 데 약 50 초가 걸립니다. 성능 향상을 위해 WebApiContrib.Formatting.ProtoBuf를 프로젝트에 추가했습니다. 데이터는 검도 UI 그리드에 표시됩니다.웹 Api, Howto는 ProtoBuf로 성능을 개선합니다.

무엇이 여기에 있습니까? 보기의 데이터 유형 또는 유형 또는 그와 비슷한 것? 성과를 향상시킬 수있는 다른 방법이 있습니까? 여기

일부는>

POCO 클래스 snippets- :

[ProtoContract] 
    public partial class KDAuftraege 
    { 
     [ProtoMember(1)] 
     public int AngebotsNummer { get; set; } 
     [ProtoMember(2)] 
     public Nullable<int> BesuchsNummer { get; set; } 
     [ProtoMember(3)] 
     public Nullable<int> Kennummer { get; set; } 
     [ProtoMember(4)] 

보기 :

var remoteDataSource = new kendo.data.DataSource({ 
     transport: { 
      read: { 
       url: '/api/WebApiAuftraege' 

      }, 
     }, 

컨트롤러 :

public IQueryable<KDAuftraege> GetKDAuftraeges() 
    { 
     //return db.KDAuftraeges.Take(500); 
     return db.KDAuftraeges; 
    } 

WebApi :

config.Formatters.Add(new ProtoBufFormatter()); 

헤더 :

Cache-Control no-cache 
Content-Length 36227588 
Content-Type application/json; charset=utf-8 
Date Sat, 07 Jun 2014 09:23:54 GMT 
Expires -1 
Pragma no-cache 
Server Microsoft-IIS/8.0 
X-AspNet-Version 4.0.30319 
X-Powered-By ASP.NET 
X-SourceFiles =?UTF-8?B?YzpcdXNlcnNcb2xkc3BvcnRcZG9jdW1lbnRzXHZpc3VhbCBzdHVkaW8gMjAxM1xQcm9qZWN0c1xWaXM0XFZpczRcYXBpXFdlYkFwaUF1ZnRyYWVnZQ==?= 
Anfrage-HeaderQuelltext anzeigen 
Accept */* 
Accept-Encoding gzip, deflate 
Accept-Language de,en-US;q=0.7,en;q=0.3 
Connection keep-alive 
Cookie __RequestVerificationToken=wMVQWPOkXsB2XDIFN_07RJDtKqN_90dLRYaBYJGsFSGEHTcQ1S6e15mPiWrvkMHS8HrAlHYAI0OVSkqtPQHFVMP5DxoyccijSktL_KsoEFU1; .AspNet.ApplicationCookie=RTQ61CfArDWHlWN06eOpZiZY6NmFGp0SwCCuR8bQCtnItSz6S8YTasQu4-uoRQCc-XqWDCZmtOpEb-b0SyIioQPomkm1BrKywMcVwt3bF_JBxORKGg-UNSHyPvFyBohiS1sJ354LpRHIjrPIA8rUexvZih4VrK9lvHu_sm21ncNXXV7jATKAjTdX7J3XvfxRsF11fhgDNtpXPEWxQPjD7Rkj5yvdqI-vbfr9tfQbszUR1O3oOjYcRxUvvVrJ7xnt-caxt-o_Kut1dixLEA241pMGPCHfetWK73Yp148K3X9By6ylHFOTEjjDwHZyHLIrBwwOZ-ujnaOf20jQzeZXaF16bHxeadLYuKK-Z2DpdzaJXPzZd2pBbzHJMFX7USfZmp7OZzLpOitLCMovGHwdRiLD0F2NR1a0iTHCgiZLvA8 
Host localhost:19275 
Referer http://localhost:19275/MvcAuftraege 
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0 
X-Requested-With XMLHttpRequest 
+0

요청/응답의 헤더를 게시 할 수 있습니까? 'Accept : application/x-protobuf'가 설정되어 있습니까? – Prescott

+0

헤더를 업데이트했습니다. 실제로 어디에서'Accept : application/x-protobuf'를 설정해야합니까? – oldsport

+1

서버가 인코딩을 선택할 수 있도록'*/*'로 설정되어있는 것처럼 보입니다. 내 생각 엔 proto 버퍼 인코딩이 마지막 옵션입니다. 다른 모든 포맷터 ('config.Formatters.Clear();')를 제거한 다음 proto-buf 포맷터를 추가 할 수있었습니다. 또는 자바 스크립트에서 요청을 변경하여 설정하십시오 (미안하지만 익숙하지 않습니다) – Prescott

답변

2

옵션 1 : 뷰 데이터 소스 코드 (나는 이것이 바로 생각)

var remoteDataSource = new kendo.data.DataSource({ 
    transport: { 
     read: { 
      type: 'GET', 
      headers: { Accept: 'application/x-protobuf' }, 
      url: '/api/WebApiAuftraege' 
     }, 
    }, 

옵션 2 변경 : 웹 API의 포매터 변경 ProtoBuf가되도록 기본값 :

config.Formatters.Insert(0, new ProtoBufFormatter()); 
+1

옵션 2 (옵션 2를 사용해야 함)는 아닙니다. 대신에'config.Formatters.Insert (0, new ProtoBufFormatter());' – Aron

+0

@Aron을 삽입하는 방법이 있다는 것을 알고 있었다. 내 대답과 upvoted 주석을 업데이트하는 방법을 알고 있었다. – Prescott

+0

두 옵션을 모두 시도했습니다. 옵션 2만이 나를 위해 일했습니다 (Aron의 제안과 함께). 형식이 이제'application/x-protobuf'로 변경되었으며 파일 크기는 10MB로 줄어 들었습니다. 하지만 로딩 시간은 여전히 ​​50 초 이상입니다. – oldsport

관련 문제