1

我們正在研究與Dynamics集成的ASP.NET MVC應用程序。該項目使用Dynamics SDK將數據傳遞給插入或更新的Dynamics。它確實是一個非常輕量級的觸摸集成 - 在網站的商店結賬過程中,我們整理數據並將其傳遞給Dynamics(由Dynamics 365託管)。在我們的實例中動態創建用戶帳戶的示例在下面可以看到:使用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; 
     } 
    } 

()方法可能需要長達20秒完成xrm.SaveChanges。使用Fiddler我們可以看到,沒有大的HTTP開銷導致對Dynamics實例的請求緩慢,這似乎表明,Dynamics收到請求後處理數據的速度很慢。

有沒有人有任何關於如何加快速度的指針/提示,或爲什麼它需要這麼長的時間來處理?如果Dynamics在虛擬機上運行,​​我只會投入額外的資源,但是我們當然不能控制這種情況下的基礎架構。

任何意見將不勝感激。

感謝您的時間提前

親切的問候

dotdev

+0

任何插件?在聯繫人的「創建」上運行的實時工作流程? – dynamicallyCRM

回答

2

首先,你有任何插件或實時工作流程執行?如果是,請禁用它們並確認您仍然存在此性能問題(即,問題在於本機CRM,而與您的配置或定製無關)。

是否每次都創建一個新的_crmConnection對象?如果是這樣,您是否緩存授權令牌。這裏最可能的原因是與ADFS的安全握手。 20秒仍然會很慢。我已經看到這需要長達5秒,但平均水平要低得多(根據我的經驗,平均值是2秒)。

我構建了以下內容作爲創建Contact實體的快速性能測試。我在一個Dynamics 365試用版中指出了它。您可以通過創建一個IOrganizationService對象作爲conn來運行此LINQPad。這可能是開始縮小問題的好地方。

// 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"); 

我得到了以下結果:

事務總數:25 /平均時間:268.2毫秒/最大時間:714毫秒/分鐘時間:207毫秒

這裏是一個圖像它通過Fiddler運行。您可以看到最初的安全授權,然後看到對Organization.svc端點的26個調用。有一個WhoAmIRequest,然後有25個Create調用。

Fiddler of Performance Test

+0

嗨,尼克,非常感謝您的詳細回覆。這將是星期四之前我可以嘗試的代碼,但我會回來給你,讓你知道我如何得到放心。再次,非常感謝。 – dotdev

+0

嗨尼克 - 再次感謝您的詳細回覆。我剛剛完成了對快速測試平臺的測試,結果如下: 交易總數:25 /平均時間:3290。08毫秒/最大時間:5526毫秒/分鐘時間:2551毫秒 我只能看到約3個工作流程附加到聯繫人實體。你會建議停用它們,看看我得到了什麼結果? – dotdev

+0

現在我很好奇你在哪裏得到20秒的交易時間。如果這裏最糟糕的情況是5秒(基本上是同一事務)。您當然可以嘗試停用任何實時工作流程和/或插件以確定其影響。我也會去https://ORGNAMEURL/tools/diagnostics/diag.aspx並查看延遲測試和帶寬測試。 – Nicknow