0

我有一个批量更新应用程序,它通过基于某些逻辑更新它的一些字段来更新特定实体的记录。我正在使用 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);

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

4

1 回答 1

0

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

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


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

从 .NET 4.0 开始,您可以在这样的列表上轻松启用多线程:

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

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

于 2012-05-02T14:49:13.867 回答