我有一个大规模更新应用程序,通过基于某种逻辑更新某些实体的字段来更新特定实体的记录。我使用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);上面是我用来更新记录的一个小代码片段。
发布于 2012-05-02 14:49:13
因为我的解释太长了,所以我会把它作为答复发出去。
我知道多线程涉及更多的思考/问题/风险,但您看到的是一个响应太慢的服务调用。
如果你想加快速度,有四种可能性:
假设没有批量更新的服务调用,并且无法编辑服务,则可以采用多线程方式,也可以直接访问数据库。
鉴于这两个选择,我将明确选择多线程方法,这将是一个更安全的方法,然后黑客进入数据库。
从.NET 4.0开始,您可以轻松地在列表上启用多线程,如下所示:
Parallel.ForEach(entityList, entity => {
//copy paste your looped code here
});你可以编辑你的代码,看看最终结果是不是你太喜欢了,如果不是:欢迎来到crm,上帝的速度!
https://stackoverflow.com/questions/10413864
复制相似问题