0

시나리오 : 이전에 WCF Data Services 3.0을 호스팅 한 제 3의 회사와 협력 해 왔으며 웹 서비스에 대한 API 액세스 만 제공하고 있습니다. 아니요. 스토어 절차를 사용하여 속도를 높일 수 없습니다. SQL 직접 액세스 권한이 있습니다.WCF Data Services에서 멀티 스레딩/pfx를 사용하여 작업 속도를 높이려면 어떻게해야합니까?

저는 PFX로 약간 놀았습니다. WCF Data Services를 사용하여 PFX를 사용하려고 시도 했으므로 잘못되었을 수 있습니다. 예를 들어

public List<EntityA> GetAEntitiesBy(int customerID) { 
      var result = new List<EntityA>(); 
      int lastResultCount = 50; 
      int callsMade = 0; 

      while (lastResultCount == 50) 
      { 
      var results = MyApiWrapper.CreateODataContext().EntityA.Expand("Customer").Expand("EntityB").AsParallel() 
     .Where(c => c.EntityA.CustomerID == customerID) 
     .Where(c => c.EntityB.IsProperty1True && c.EntityB.Property2TypeID == 1) 
     .Select(c => c) 
     .Skip(callsMade * 50) 
     .Take(50)); 

results.ForAll(c => nodes.Add(c)); 

      callsMade++; 
      lastResultCount = results.Count; 

      } 

     return nodes; 
} 

내가, 내 병목 나중에 내가 .ForEach하고 각각을하기 때문에이 함수의 결과는, 다시 내 웹 양식으로 이동 한 후 만든 최대 내가 DataServiceQuery을 할 때마다 50 개 행을 당길 만 수있어 이해 행 좀 다른 쿼리 (WCF) againts 다른 서비스를 실행해야합니다.

어떤 제안이 작업을 빠르게하는 방법?

반면에이 메서드를 디버깅 할 때 Parallel Query Execution 중에 GetEnumerator가 호출 될 때 "Children could not Be evaluated"이라는 오류 메시지가 나타났습니다.

감사합니다.

답변

1

여러 개의 쿼리를 병렬로 실행하면 전체 처리량이 향상 될 수 있습니다. 귀하의 고객은 응답이 비 순차적으로 도착할 가능성에 대비해야합니다. 웹 서비스 공급자는 허용 된 병렬 쿼리 수에 제한을 둘 수 있습니다. 이러한 한계를 이해하고 존중해야합니다. 인프라의 크기에 따라 웹 서비스가 이미 최적 이하인 경우 너무 가까이에 요청을 너무 많이 발행하면 수익이 줄어들 수 있습니다.

또 다른 옵션은 ... 당신이 고객과 관련된 꽤 많은 개체를 가져 오는 것처럼 보이는

. 대신 웹 페이지가 처음 렌더링 될 때 처음 50 개를 표시하고 Ajax 쿼리를 사용하여 나머지 50 개를 가져 오는 것을 고려할 수 있습니다. 전반적인 처리량은 먼저 서버 측에서 전체 처리량을 가져온 다음 페이지를 렌더링하는 경우보다 약간 느립니다. 그러나 사용자 환경은 페이지에서 어떤 일이 일어나고 있는지에 따라 훨씬 낫습니다.

+0

안녕하세요 @ 에릭, 귀하의 회신에 감사드립니다. 출력 결과에 대해 ObjectCache를 사용하고 있습니다.이 데이터는 사용자 정의 jQGrid (페이지 매김을 통해 10, 20, 50 등 원하는 값으로 표시됩니다.)이 문제가 될 수 있지만 사용자가 원하는 모든 것입니다. –

+0

여러 페이지에 대한 데이터를 병렬로 가져 오시겠습니까? –

+0

하나의 단일 보고서 (그리드)에 대한 데이터를 하나의 단일 페이지로 가져옵니다. –