J'ai deux datatables. DataTable dtRequired et DataTable dtResult.différence entre 2 données
Je souhaite générer une base de données contenant des lignes qui n'étaient pas présentes dans dtResponse mais qui ont été trouvées dans dtRequired.
Approche 1 Nous utilisons l'algorithme spécifié à l'adresse suivante http://weblogs.sqlteam.com/davidm/archive/2004/01/19/739.aspx. Et cet algorithme a été considéré comme l'un des plus lents de notre profilage.
Approche 2 Donc, j'ai essayé de remplacer l'algo ci-dessus par quelque chose qui est décrit ci-dessous. dtRequired est indexé sur les colonnes I m en utilisant ci-dessous à Recherchez la ligne.
if (dtResult.Rows.Count > 0)
{
lock (dtResult)
{
DataRow rowfound = null;
for (int i = 0; i < dtResult.Rows.Count; i++)
{
DataRow row = dtResult.Rows[i];
rowfound = dtRequired.Rows.Find(new object[] { row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8] });
if (rowfound != null)
{
dtRequired.Rows.Remove(rowfound);
}
}
}
}
La pièce ci-dessus est cependant plus long que le temps pris par Approche 1. L'approche 2 prend ~ 3 secondes pour dtResult avec 1250 lignes et dtRequired avec 4500 lignes.
Quelque chose ne va pas avec l'approche que j'ai mentionnée ci-dessus? Y a-t-il une meilleure approche pour y parvenir?
Si je peux demander, pourquoi faites-vous cela en utilisant dataTable? Cela ne peut-il pas être fait au backend? – shahkalpesh
Non. Le datatable source est utilisé pour former une structure de données compacte qui est envoyée au Webservice. Webservice interprète ces données en conséquence, puis renvoie l'ensemble de données. –
Les deux tables ont-elles une colonne unique pouvant être triée? Si c'est le cas; vous pouvez trier les deux en premier, puis utiliser un algorithme de fusion (voir http: //en.wikipedia.org/wiki/Merge_algorithm) pour avancer chaque ligne de la table en cours tandis qu'elle est derrière l'autre, en insérant les lignes manquantes dans une nouvelle table. –