D365 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

我正在构建一个控制台,它连接到一个D365实例,使用FetchXML查找记录,并使用特定值更新这些记录。它起作用了,它正在更新记录。然而,它只是每秒更新一到两次,这远远不够理想,我有数十万条记录要更新。我见过/使用过至少每秒更新数百次的控制台应用程序

我是否以错误的方式去做我想做的事情?我的代码中一定有什么东西使得它效率低下/愚蠢。我还应该说这是我第一次使用C#,所以我可能在做一些难以置信的蠢事

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请求的外观