1

Ich muss CRM-Daten von externen Tabelle aktualisieren. Alles funktioniert gut, aber es ist sehr langsam. Dies ist mein Code:Verwenden von Parallel.ForEach zum Einfügen und Aktualisieren von CRM-Daten

static void Main(string[] args) 
{ 
var dbClient = new CollectionEntities(); //Get database Entities 
using(var xrm = new XrmServiceContext("Xrm"); // Get CRM Entities 
    { 
foreach (var row in dbClient.Client) //Reading rows from database 
{ 
var c = (from a in crm.new_clientSet where a.new_Idnumber == row.Client_ID select a).FirstOrDefault(); // IS there clint with id from database 
          if (c == null)// if client not exist i create new if exists I update data 
          { 
           c = new new_client { new_Idnumber = row.Client_ID }; 
           crm.AddObject(c); 
          } 
          c.new_name = row.Client_name; //[Client_name] 
          c.new_Idnumber = row.Client_ID;//[Client_ID] 
          c.EmailAddress = row.Email;//[Email] 
       xrm.AddObject(c); 
        xrm.SaveChanges(); 

} 
} 
} 

Damit kann ich einfügen und Aktualisieren von Daten in CRM, aber seine verlangsamen. Gibt es eine Möglichkeit, diese Parallel.ForEach-Methode oder eine andere Methode zu verwenden, um dies zu beschleunigen? Vielen Dank!

Antwort

0

Definitiv ExecuteMultipleRequest ist der Weg in diesem Fall zu gehen.

Der Unterschied ist, dass Sie eine einzige Anfrage senden, so dass Sie nicht den Netzwerkaufwand haben und auch alle Ihre Einsätze werden auf Server-Seite von CRM viel schneller verarbeitet werden.

0

Sie laden eine einzelne Zeile aus CRM in jede Schleife. Das macht Ihre App sehr "gesprächig" und es kostet mehr Zeit im Netzwerk-Overhead als das Laden von Daten. Versuchen Sie, Ihr gesamtes CRM-Dataset mit einer einzigen Abfrage vor der Schleife in den Speicher zu laden. Suchen Sie dann in der Schleife Datensätze aus dem Speicher, anstatt CRM abzufragen. Wenn Sie einen großen Datensatz haben, müssen Sie wahrscheinlich Paging-Cookies verwenden.

0

Schauen Sie sich die Open Source-Bibliothek PFE Core Library for Dyanmics CRM des Teams von Premier Field Engineering - Dynamics bei Microsoft an. Es behandelt die Parallelität für Sie. Die Parallel Common Request Beispiele Seite zeigt, wie einfach es ist, eine Reihe von Aufzeichnungen parallel zu aktualisieren:

public void ParallelUpdate(List<Entity> targets) 
{ 
    try 
    { 
     this.Manager.ParallelProxy.Update(targets); 
    } 
    catch (AggregateException ae) 
    { 
     // Handle exceptions 
    } 
} 

Sie können es auch für große Datenmengen Abfrage verwenden, um ... es wird behandeln alles für Sie abruft.