gpt4 book ai didi

multithreading - 如何使用CRM Online 2015实现良好的导入性能

转载 作者:行者123 更新时间:2023-12-03 13:14:23 27 4
gpt4 key购买 nike

场景:

Create or update records in CRM from an external database based on if the record key exists in CRM or not.



平台: CRM 2015 Online

方法 SSIS,带有.Net 4脚本组件

问题:
不管我做什么,我每秒都无法获得超过1条记录。我真的希望我做错了

我在做什么:
  • 使用Guid和Key字段从CRM获取所有记录的列表。
  • 将记录分为多个任务。
  • 根据(1)的先前列表中是否存在记录,使用“创建”或“更新”在每个任务中创建ExecuteMultipleRequest。
  • 为每个线程创建一个OrganizationService(在连续的线程Round Robin样式之间重用(请参见下面的代码))。
  • 运行执行多个。
  • 哭过速度。

  • 结果似乎不会因并行任务的数量或批处理大小而变化。它基本上总是每秒约0.9-1.5个记录。

    我尝试了所有内容,从1个线程(1000个线程)到16个线程(每个1个线程)。

    这篇帖子声称每秒可能有200-300条记录,这让我望而却步: evil taunting blog post with 300 records per second to CRM online

    项目中的代码段(尝试仅复制可能相关的内容):

    上下文创建。
     foreach (int i in Enumerable.Range(1, _MaxThreads * 2))
    {
    var crmConnection = CrmConnection.Parse(connectionString);
    var organisationservice = new OrganizationService(crmConnection);
    _OrgServiceList.Add(organisationservice);
    }

    我如何创建任务:
    private void ImportNewBatch(List<Customer> dataSet)
    {
    var service = _OrgServiceList[_CurrentServicePosition];
    _CurrentServicePosition++;

    if (_CurrentServicePosition >= _OrgServiceList.Count)
    _CurrentServicePosition = 0;

    var aTask = new Task(() => WorkerThread(dataSet, service), TaskCreationOptions.None);
    aTask.Start();
    _RunningThreads.Add(aTask);

    if (_RunningThreads.Count >= _MaxThreads)
    Task.WaitAny(_RunningThreads.ToArray());

    _RunningThreads.RemoveAll(t => t.IsCompleted);
    }

    执行多重查询
    var requestWithResults = new ExecuteMultipleRequest()
    {
    Settings = new ExecuteMultipleSettings()
    {
    ContinueOnError = true,
    ReturnResponses = true
    },
    Requests = new OrganizationRequestCollection()
    };

    更新1
    从Microsoft获得了有关CRM的半非正式的答案,这对其他人也可能很有趣:
  • 在线CRM的良好性能约为10条记录/秒。
  • 性能高度依赖于您是否具有插件。
  • CRM Online会限制多个查询,以便一次只能运行两(2)个,
    这两个之后的所有查询都将排队并依次处理。
  • CRM检查您的IP和登录名,以便您避免与多个用户或单独的上下文进行限制。
  • 拥有更多许可证的解决方案将为您带来更多
    性能,即在所有其他条件相同的情况下,具有100个许可的实例将比具有5个许可的实例快。
  • 最佳答案

    您将永远受到Dynamics CRM Online提供给您的实例的性能的限制。我知道在内部部署方案中,我每秒能够实现成千上万次插入(正常记录,没有运行任何插件/工作流。)

    我不会尝试在您的代码中使用多线程,而是使用Balanced Data Distributor实现所需的功能。有点痛苦-因为您必须复制目的地,但可以使用。

    您可以在Sonoma Partner的博客上阅读有关使用Balanced Data Distributor with CRM的一些重点内容。我会在这里复制它,但是它不是很多代码,主要是图像。

    关于multithreading - 如何使用CRM Online 2015实现良好的导入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28429159/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com