2

我们正在开发与 Dynamics 集成的 ASP.NET MVC 应用程序。该项目使用 Dynamics SDK 将数据传递给 Dynamics,这些数据可以是插入的,也可以是更新的。这确实是一个非常轻松的集成 - 在网站的商店结账过程中,我们整理数据并将其传递给 Dynamics(托管在 Dynamics 365 中)。在我们的 Dynamics 实例中创建用户帐户的示例如下所示:

        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() 方法最多可能需要 20 秒才能完成。使用 Fiddler 我们可以看到没有导致对 Dynamics 实例的缓慢请求的主要 HTTP 开销,这似乎表明 Dynamics 在收到请求后处理数据的速度很慢。

有没有人有任何关于如何加快速度的指示/提示,或者为什么需要这么长时间来处理?如果 Dynamics 在 VM 上运行,我只会向它投入额外的资源,但在这种情况下,我们当然无法控制基础架构。

任何建议将不胜感激。

提前感谢您的时间

亲切的问候

点开发

4

1 回答 1

3

首先,您是否有任何插件或实时工作流程正在执行?如果是这样,请禁用它们并确认您仍然遇到此性能问题(即,问题是本机 CRM,与您的配置或自定义无关。)

_crmConnection您是否每次都创建一个新对象?如果是这样,您是否缓存了授权令牌。这里最可能的原因是与 ADFS 的安全握手。20秒仍然很慢。我已经看到这需要长达 5 秒的时间,但平均值要低得多(根据我的经验,大约需要 2 秒。)

我构建了以下内容作为创建Contact实体的快速性能测试。我将其指向 Dynamics 365 试用版。您可以通过将IOrganizationService对象创建为conn. 这可能是开始缩小问题范围的好地方。

// 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"] = "test@demo.com.local";
    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电话。

性能测试的提琴手

于 2016-12-05T18:04:58.403 回答