D365 C#-检索多个,更新速度非常慢
我正在构建一个控制台,它连接到一个D365实例,使用FetchXML查找记录,并使用特定值更新这些记录。它起作用了,它正在更新记录。然而,它只是每秒更新一到两次,这远远不够理想,我有数十万条记录要更新。我见过/使用过至少每秒更新数百次的控制台应用程序 我是否以错误的方式去做我想做的事情?我的代码中一定有什么东西使得它效率低下/愚蠢。我还应该说这是我第一次使用C#,所以我可能在做一些难以置信的蠢事D365 C#-检索多个,更新速度非常慢,c#,dynamics-crm,microsoft-dynamics,fetchxml,dynamics-crm-365,C#,Dynamics Crm,Microsoft Dynamics,Fetchxml,Dynamics Crm 365,我正在构建一个控制台,它连接到一个D365实例,使用FetchXML查找记录,并使用特定值更新这些记录。它起作用了,它正在更新记录。然而,它只是每秒更新一到两次,这远远不够理想,我有数十万条记录要更新。我见过/使用过至少每秒更新数百次的控制台应用程序 我是否以错误的方式去做我想做的事情?我的代码中一定有什么东西使得它效率低下/愚蠢。我还应该说这是我第一次使用C#,所以我可能在做一些难以置信的蠢事 using System; using Microsoft.Xrm.Sdk; using Micro
using System;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Tooling.Connector;
namespace My.Crm.RetrieveMultipleConsole
{
class Program
{
static void Main(string[] args)
{
try
{
var connectionString = @"AuthType = Office365; Url = xxxx/;Username=xxxx;Password=xxxx";
CrmServiceClient conn = new CrmServiceClient(connectionString);
IOrganizationService service = (IOrganizationService)conn.OrganizationWebProxyClient != null ? (IOrganizationService)conn.OrganizationWebProxyClient : (IOrganizationService)conn.OrganizationServiceProxy;
string fetchquery = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='account'>
<attribute name='name' />
<order attribute='name' descending='false' />
<filter type='and'>
<condition attribute='name' operator='like' value='%Tom%' />
</filter>
</entity>
</fetch>";
var multipleRequest = new Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest()
{
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = false,
ReturnResponses = true
},
Requests = new OrganizationRequestCollection()
};
EntityCollection accounts = service.RetrieveMultiple(new FetchExpression(fetchquery));
foreach (var c in accounts.Entities)
{
Console.WriteLine("accountid: {0}", c.Attributes["name"]);
Microsoft.Xrm.Sdk.Messages.UpdateRequest updateRequest = new Microsoft.Xrm.Sdk.Messages.UpdateRequest { Target = c };
multipleRequest.Requests.Add(updateRequest);
c.Attributes["name"] = "New Name";
Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse multipleResponse = (Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse)service.Execute(multipleRequest);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
}
}
使用系统;
使用Microsoft.Xrm.Sdk;
使用Microsoft.Xrm.Sdk.Query;
使用Microsoft.Xrm.Tooling.Connector;
命名空间My.Crm.RetrieveMultipleConsole
{
班级计划
{
静态void Main(字符串[]参数)
{
尝试
{
var connectionString=@“AuthType=Office365;Url=xxxx/;用户名=xxxx;密码=xxxx”;
CrmServiceClient conn=新的CrmServiceClient(connectionString);
IOOrganizationService=(IOOrganizationService)conn.OrganizationWebProxyClient!=空?(IOOrganizationService)conn.OrganizationWebProxyClient:(IOOrganizationService)conn.OrganizationServiceProxy;
字符串fetchquery=@”
";
var multipleRequest=new Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest()
{
设置=新的ExecuteMultipleSettings()
{
ContinueOnError=false,
ReturnResponses=true
},
请求=新的OrganizationRequestCollection()
};
EntityCollection accounts=service.RetrieveMultiple(新的FetchExpression(fetchquery));
foreach(accounts.Entities中的var c)
{
WriteLine(“accountid:{0}”,c.Attributes[“name”]);
Microsoft.Xrm.Sdk.Messages.UpdateRequest UpdateRequest=new Microsoft.Xrm.Sdk.Messages.UpdateRequest{Target=c};
multipleRequest.Requests.Add(updateRequest);
c、 属性[“名称”]=“新名称”;
Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse multipleResponse=(Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse)服务.Execute(multipleRequest);
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
Console.ReadLine();
}
}
}
取出您的服务。从foreach
循环执行(多重请求)
,将其保留在外部。这样的话,执行将是真正的ExecuteMultipleRequest
var multipleRequest = new Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest()
{
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = false,
ReturnResponses = true
},
Requests = new OrganizationRequestCollection()
};
EntityCollection accounts = service.RetrieveMultiple(new FetchExpression(fetchquery));
foreach (var c in accounts.Entities)
{
Console.WriteLine("accountid: {0}", c.Attributes["name"]);
Microsoft.Xrm.Sdk.Messages.UpdateRequest updateRequest = new Microsoft.Xrm.Sdk.Messages.UpdateRequest { Target = c };
multipleRequest.Requests.Add(updateRequest);
c.Attributes["name"] = "New Name";
}
Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse multipleResponse = (Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse)service.Execute(multipleRequest);
取出您的
服务。从foreach
循环执行(多重请求)
,将其保留在外部。这样的话,执行将是真正的ExecuteMultipleRequest
var multipleRequest = new Microsoft.Xrm.Sdk.Messages.ExecuteMultipleRequest()
{
Settings = new ExecuteMultipleSettings()
{
ContinueOnError = false,
ReturnResponses = true
},
Requests = new OrganizationRequestCollection()
};
EntityCollection accounts = service.RetrieveMultiple(new FetchExpression(fetchquery));
foreach (var c in accounts.Entities)
{
Console.WriteLine("accountid: {0}", c.Attributes["name"]);
Microsoft.Xrm.Sdk.Messages.UpdateRequest updateRequest = new Microsoft.Xrm.Sdk.Messages.UpdateRequest { Target = c };
multipleRequest.Requests.Add(updateRequest);
c.Attributes["name"] = "New Name";
}
Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse multipleResponse = (Microsoft.Xrm.Sdk.Messages.ExecuteMultipleResponse)service.Execute(multipleRequest);
@Arun您能为我提供一个executemultiplerequest的SOAP主体示例吗?我不知道c#@utkarsh2k2,请创建一个新问题,并添加更多上下文,thanks@Arun这里是问题的链接,请注意没有附加代码,因为我们不知道soap请求的外观like@Arun您能为我提供一个executemultiplerequest的SOAP主体示例吗?我不知道c#@utkarsh2k2,请创建一个新问题,并添加更多上下文,thanks@Arun这里是问题的链接,请注意,没有附加代码,因为我们不知道soap请求的外观