2010-08-06 5 views
2

Je sais que c'est une question commune posée plusieurs fois sur SO. Mais aide-moi de toute façon. En fait, je dois télécharger des données de ma machine locale vers la base de données SQL distante. La base de données SQL distante possède une seule table où 800 000 enregistrements sont présents. Maintenant, j'ai environ 1.21311 enregistrements localement dans mon système, à partir de laquelle 75% des enregistrements existent déjà sur la base de données distante, mais nous ne savons pas exactement quels enregistrements. Nous vérifions notre numéro en utilisant un code unique appelé DCNNumber. Si DCN existe sur le serveur alors excluez else insert. Donc pour ce que j'ai fait, c'est que j'ai rassemblé tous les DCN de ma base de données distante en XML en utilisant Dataset. Le XML seul devient un fichier 24mb. De mes fichiers de texte locaux, je suis en train d'analyser un lac de 1,2 lacs d'enregistrement à une liste générique. Les DCN XML sont également ajoutés à une liste générique de chaîne.Filtrer les enregistrements de la liste générique <string>

Ensuite, ces deux listes sont comparées en utilisant if (! LstODCN.Contains (DCNFromXML)) {lstNewDCN.Add (item)};

Mais ce code prend près d'une heure pour exécuter et filtrer les enregistrements. J'ai donc besoin d'un moyen optimal de filtrer un tel chiffre.

Répondre

2

Chargez tous les résultats dans un HashSet<string> - ce sera beaucoup plus rapidement au contrôle de confinement.

Il est possible que LINQ serait également ce simple, mais je suis un peu confus quant à exactement ce qui se passe ... Je soupçonne vous pouvez simplement utiliser:

var newDCNs = xmlDCNs.Except(oldDCNs); 
1

En plus de la réponse de Jon : l'utilisation d'un ensemble de données XML pour transférer les données à partir du serveur est probablement une mauvaise idée, car XML est un format très verbeux. Utiliser un format de fichier plat + compression serait beaucoup plus efficace.

Questions connexes