1

우리는 Dynamics와 통합 된 ASP.NET MVC 응용 프로그램을 만들고 있습니다. 이 프로젝트는 Dynamics SDK를 사용하여 삽입되거나 업데이트 된 Dynamics에 데이터를 전달합니다. 정말 가벼운 터치 통합입니다. 웹 사이트의 상점 체크 아웃 과정에서 데이터를 대조하여 Dynamics (Dynamics 365에서 호스팅되는)에 전달합니다. 우리의 역학 인스턴스에서 사용자 계정을 만드는 예는 다음과 볼 수 있습니다 : 메소드를 완료하는 데 최대 20 초가 걸릴 수 있습니다()Dynamics SDK로 느린 데이터 처리

 public Guid? CreateProfile(IProfile profile) 
    { 
     using (var xrm = new XrmServiceContext(_crmConnection)) 
     { 
      var crmProfile = new Contact 
      { 
       EMailAddress1 = profile.Username, 
       FirstName = profile.FirstName, 
       LastName = profile.LastName, 
      }; 
      xrm.AddObject(crmProfile); 
      xrm.SaveChanges(); 
      return crmProfile.Id; 
     } 
    } 

xrm.SaveChanges을. Fiddler를 사용하면 Dynamics 인스턴스에 대한 느린 요청을 유발하는 주요 HTTP 오버 헤드가 없음을 알 수 있습니다.이 요청은 일단 요청을받은 Dynamics의 데이터 처리 속도가 느린 것으로 판단됩니다.

아무도이 속도를 높이는 방법에 대한 조언이나 팁이 있습니까? 아니면 처리하는 데 너무 오래 걸리는 이유는 무엇입니까? 다이나믹스가 VM에서 실행되고 있다면 여분의 리소스가 필요하지만이 시나리오에서는 인프라를 제어 할 수 없습니다.

모든 조언을 주시면 감사하겠습니다. 사전에 시간

감사

종류는 당신이 어떤 플러그인이나 실시간 실행 워크 플로가 있습니까,

+0

모든 플러그인? 연락처의'create'에서 실행되는 실시간 워크 플로우? – dynamicallyCRM

답변

2

먼저 dotdev

에 관하여? 그렇다면이 기능을 사용 중지하고 성능 문제가 계속 발생하는지 확인하십시오 (예 : 문제는 기본 CRM이며 구성 또는 사용자 정의와 관련 없음).

언제든지 _crmConnection 개체를 새로 만드십니까? 그렇다면 권한 부여 토큰을 캐시하고 있습니까? 여기서 가장 가능성있는 원인은 ADFS와의 보안 핸드 셰이크 일 것입니다. 20 초는 여전히 느립니다. 나는 5 초의 시간이 걸렸지 만 평균은 훨씬 낮았다. (내 경험상 2 초 정도)

나는 Contact 엔티티를 생성하는 빠른 성능 테스트로 다음을 만들었다. Dynamics 365 시험에서 지적했습니다. IOrganizationService 개체를 conn으로 만들어이 LINQPad를 실행할 수 있습니다. 이것은 아마 문제를 좁히기 시작할 수있는 좋은 장소 일 것입니다. 여기

은 이미지입니다 (207) MS :

총 거래 : 25/평균 시간 : 268.2 MS/최대 시간 : 714 MS/최소 시간

// See http://nicknow.net/linqpad-dynamics-crm-sdk/ for a method to create IOrganizationService in LINQPad 
IOrganizationService conn = MyExtensions.GetCRMService("Valid CRM Connection String Goes Here"); 

conn.Execute(new WhoAmIRequest()); 

var times = new List<long>(); 

for (int i = 0; i < 25; i++) 
{ 
    var crmProfile = new Entity("contact"); 

    crmProfile["emailaddress1"] = "[email protected]"; 
    crmProfile["firstname"] = "test"; 
    crmProfile["lastname"] = $"test {i}"; 

    var sw = new Stopwatch(); 

    sw.Start(); 
    conn.Create(crmProfile); 
    sw.Stop(); 

    times.Add(sw.ElapsedMilliseconds); 
    } 

Console.WriteLine($"Total Transactions: {times.Count()}/Average Time: {times.Average()} ms/Max Time: {times.Max()} ms/Min Time: {times.Min()} ms"); 

나는 다음과 같은 결과를 얻었다 Fiddler를 통해 실행 중입니다. 초기 보안 권한을 확인한 다음 Organization.svc 끝점에 26 건의 호출을 볼 수 있습니다. WhoAmIRequest과중 하나가 있습니다.

Fiddler of Performance Test

+0

안녕하세요. Nick, 자세한 답변을 주셔서 대단히 감사드립니다. 코드를 사용하기 전에 목요일이 될 것이지만, 내가 어떻게 안심할 수 있는지 알려 드리겠습니다. 다시 한번, 많은 감사합니다. – dotdev

+0

안녕하세요 닉 - 자세한 답변을 주셔서 다시 한 번 감사드립니다. 귀하의 빠른 테스트 베드를 테스트하는 방법에 대해 알아 보았습니다. 결과는 다음과 같습니다 : 총 거래 수 : 25/평균 시간 : 3290.08 ms/최대 시간 : 5526 ms/최소 시간 : 2551 ms 연락처 엔티티에 첨부 된 약 3 개의 워크 플로 만 볼 수 있습니다. 당신은 그 (것)들을 비활성화하고 나가 얻는 결과를 볼 것을 조언 할 것입니다? – dotdev

+0

글쎄, 이제는 20 초의 거래 시간을 얻는 곳이 궁금합니다. 최악의 경우 5 초 (본질적으로 동일한 트랜잭션 수행)였습니다. 실시간 워크 플로 및/또는 플러그인을 비활성화하여 해당 영향을 확인할 수 있습니다. 또한 https : //ORGNAMEURL/tools/diagnostics/diag.aspx로 이동하여 대기 시간 테스트 및 대역폭 테스트를 살펴 보겠습니다. – Nicknow