J'importe les données à partir de trois fichiers délimités par des tabulations dans les DataTables et après cela, je dois parcourir toutes les lignes de la table principale et trouver toutes les lignes dans deux tables enfants. Contre chaque tableau DataRow [] que j'ai trouvé à partir des tables enfant, je dois à nouveau passer individuellement chaque ligne et vérifier les valeurs en fonction de différents paramètres et à la fin je dois créer un enregistrement final qui fusionnera maître et deux enfants colonnes de table. Maintenant, j'ai fait cela et son fonctionnement, mais le problème est sa performance. J'utilise le DataTable.Select pour trouver toutes les lignes enfants de la table enfant qui, je crois, le rendent très lent. Rappelez-vous s'il vous plaît le Aucun de la table a une clé primaire que les lignes en double sont acceptables. Pour le moment, j'ai 1200 lignes dans la table principale et 8000 lignes dans la table des enfants et le temps total nécessaire est de 8 minutes.DataTable.Select et problème de performances dans C#
Toute idée comment puis-je augmenter la performance. Merci à l'avance
Le code est ci-dessous ***************
DataTable rawMasterdt = importMasterFile();
DataTable rawDespdt = importDescriptionFile();
dsHelper = new DataSetHelper();
DataTable distinctdt = new DataTable();
distinctdt = dsHelper.SelectDistinct("DistinctOffers", rawMasterdt, "C1");
if (distinctdt.Rows.Count > 0)
{
int count = 0;
foreach (DataRow offer in distinctdt.Rows)
{
string exp = "C1 = " + "'" + offer[0].ToString() + "'" + "";
DataRow masterRow = rawMasterdt.Select(exp)[0];
count++;
txtBlock1.Text = "Importing Offer " + count.ToString() + " of " + distinctdt.Rows.Count.ToString();
if (masterRow != null)
{
Product newProduct = new Product();
newProduct.Code = masterRow["C4"].ToString();
newProduct.Name = masterRow["C5"].ToString();
// -----
newProduct.Description = getProductDescription(offer[0].ToString(), rawDespdt);
newProduct.Weight = getProductWeight(offer[0].ToString(), rawDespdt);
newProduct.Price = getProductRetailPrice(offer[0].ToString(), rawDespdt);
newProduct.UnitPrice = getProductUnitPrice(offer[0].ToString(), rawDespdt);
// ------- more functions similar to above here
productList.Add(newProduct);
}
}
txtBlock1.Text = "Import Completed";
public string getProductDescription(string offercode, DataTable dsp)
{
string exp = "((C1 = " + "'" + offercode + "')" + " AND (C6 = 'c'))";
DataRow[] dRows = dsp.Select(exp);
string descrip = "";
if (dRows.Length > 0)
{
for (int i = 0; i < dRows.Length - 1; i++)
{
descrip = descrip + " " + dRows[i]["C12"];
}
}
return descrip;
}
Postez votre code. Cette quantité de données ne devrait pas causer de problèmes, nous avons donc besoin de voir votre code pour comprendre les problèmes. – Oded
s'il vous plaît voir le code ci-dessus –