1

외부 테이블에서 CRM 데이터를 업데이트해야합니다. 모두 잘 작동하지만 매우 느립니다. 이와Parallel.ForEach를 사용하여 CRM 데이터 삽입 및 업데이트

static void Main(string[] args) 
{ 
var dbClient = new CollectionEntities(); //Get database Entities 
using(var xrm = new XrmServiceContext("Xrm"); // Get CRM Entities 
    { 
foreach (var row in dbClient.Client) //Reading rows from database 
{ 
var c = (from a in crm.new_clientSet where a.new_Idnumber == row.Client_ID select a).FirstOrDefault(); // IS there clint with id from database 
          if (c == null)// if client not exist i create new if exists I update data 
          { 
           c = new new_client { new_Idnumber = row.Client_ID }; 
           crm.AddObject(c); 
          } 
          c.new_name = row.Client_name; //[Client_name] 
          c.new_Idnumber = row.Client_ID;//[Client_ID] 
          c.EmailAddress = row.Email;//[Email] 
       xrm.AddObject(c); 
        xrm.SaveChanges(); 

} 
} 
} 

내가 삽입하고 CRM의 데이터를 업데이트하지만이 둔화 될 수 있습니다 : 이것은 내 코드입니다. 이 Parallel.ForEach 메서드 또는 일부 다른 메서드를 사용하여이 속도를 높이는 방법이 있습니까? 감사!

답변

0

확실히 ExecuteMultipleRequest은이 경우에 들어가는 방법입니다.

차이점은 하나의 요청을 보내 네트워크 오버 헤드가없고 모든 삽입이 CRM에 의해 서버 측에서 훨씬 빠르게 처리된다는 것입니다.

0

모든 루프 내부에서 CRM의 단일 행을로드하고 있습니다. 이로 인해 앱이 매우 복잡해지고 데이터로드보다 네트워크 오버 헤드에 더 많은 시간을 소비하게됩니다. 루프 전 단일 쿼리로 전체 CRM 데이터 집합을 메모리에로드 해보십시오. 그런 다음 루프에서 CRM을 쿼리하는 대신 메모리에서 레코드를 조회합니다. 큰 데이터 세트를 가지고 있다면 아마도 페이징 쿠키를 사용해야 할 것입니다.

0

Microsoft의 Premier Field Engineering - Dynamics 팀에서 오픈 소스 PFE Core Library for Dyanmics CRM 라이브러리를 확인하십시오. 그것은 당신을 위해 병렬 처리를 처리합니다. Parallel Common Request 예제 페이지는 병렬로 기록 무리를 업데이트하는 것이 얼마나 쉬운 지 보여줍니다

public void ParallelUpdate(List<Entity> targets) 
{ 
    try 
    { 
     this.Manager.ParallelProxy.Update(targets); 
    } 
    catch (AggregateException ae) 
    { 
     // Handle exceptions 
    } 
} 

당신은 또한 당신을 위해 모든 것을 검색 처리 할 ... 대용량 데이터 세트를 쿼리하는 데 사용할 수 있습니다.

관련 문제