2010-01-12 3 views
1

J'ai un problème avec mon programme asp.net. Je fais un Datatable.Compute sur une très grande base de données avec une condition like dedans. Le résultat prend quelque chose comme 4 minutes à afficher ou fait un délai d'attente de demande. Si je fais la même requête avec a = et un texte fixe, cela prend presque 1 minute à montrer, ce qui pour mon usage est acceptable.Datatable.compute lente avec comme condition

Voici la ligne qui est si lent:

float test = (int)Datatbl.Tables["test"].Compute("COUNT(pn)", "pn like '9800%' and mois=" + i + " and annee=" + j); 

je cherche une solution pour 2 jours.

S'il vous plaît aidez-moi.

Répondre

1

Je l'ai trouvé. J'utilise Dataview et envoie le résultat à un DataTable. Cette accéléra le processus 10 fois

Voici un exemple:

DataView dv = new DataView(Datatbl.Tables["test"], filter, "pn", DataViewRowState.CurrentRows); 
DataTable test = dv.ToTable(); 

et vous pouvez utiliser le "test" DataTable.

+0

Comment faire ceci, expliquez-nous pour nous. – Danilo

1

Récupérez-vous les données de votre base de données dans votre base de données? Avez-vous accès à la base de données?

Si tel est le cas, une option consiste à rechercher des méthodes pour déplacer cette recherche et cette agrégation dans la base de données au lieu de le faire dans votre code C#. Une fois dans la base de données, si nécessaire, vous pouvez ajouter des index pour les colonnes 'mois' et 'annee' qui peuvent accélérer considérablement la recherche. Si '9800' est une valeur codée en dur, vous pouvez même ajouter une dénormalisation consistant en une colonne booléenne indiquant si la colonne 'pn' commence par '9800' et mettre un index sur cette colonne. Cela peut rendre la recherche très rapide en effet.

Il y a beaucoup d'options disponibles.

Questions connexes