在使用 C# 更新 CRM 4.0 中的实体时提高性能

本文关键字:实体 高性能 更新 CRM | 更新日期: 2023-09-27 18:32:59

我有一个批量更新应用程序,它通过基于某些逻辑更新特定实体的某些字段来更新特定实体的记录。我正在使用 TargetUpdate 进行记录更新,因为我有一个附加到我不想触发的实体更新的工作流(以防我使用正常更新(。但是更新这些记录需要很长时间。目前,更新 1K 记录大约需要 1.5 小时。在实际情况下,它需要在每天最多 5-6 小时(夜间作业(的时间跨度内更新大约 10K 条记录。有什么方法可以提高性能。

Centity newentityobect;
newentityobect= new Centity()
{
    asp_field1 = new Key()
    {
        Value = new Guid(field1Value)
    },
    asp_field2 = field2Value,
    asp_field3 = field3Value,
    asp_field3 = field4Value
};
TargetUpdateCentity objx = new TargetUpdateCentity();
objx.Centity = newentityobect;
UpdateRequest updateCentity = new UpdateRequest();
updateCentity.Target = objx;
UpdateResponse updatedCentity = (UpdateResponse)crmUpdateObject.Execute(updateCentity);

以上是我用来更新记录的小代码片段。

在使用 C# 更新 CRM 4.0 中的实体时提高性能

由于我的解释在评论中太长,因此我会将其作为答案发布。
我知道多线程涉及更多的思考/问题/风险,但您正在查看 1 个响应速度太慢的服务调用。
如果你想加快速度,有4种可能性:

  • 一次执行多个服务呼叫(多线程(
  • 编辑服务调用(我认为你不能,因为它是基本的CRM服务(
  • 使用不同的服务调用(我怀疑它是否存在,但如果使用批量更新会提高您的性能(
  • 避免使用服务并直接编辑数据库(我非常怀疑CRM是否支持此功能,因此将其视为黑客,但您可能会大大提高直接更新数据库的速度(。


假设批量更新没有服务调用,并且您无法编辑服务,则可以多线程或直接访问数据库。
鉴于这两个选择,我肯定会选择多线程方法,这将是一种比入侵数据库更安全的方法。

从 .NET 4.0 开始,您可以轻松地在如下所示的列表上启用多线程:

Parallel.ForEach(entityList, entity => {
   //copy paste your looped code here
});

您可以编辑代码,看看最终结果是否太符合您的喜好,如果不是:欢迎来到crm,上帝的速度!