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