EDIT: Remarque. J'aurais dû mentionner que je ne suis pas intéressé par l'utilisation du .Select, DataRowView, RowFind, etc. Merci pour ces suggestions mais le code tel qu'il est, j'espérais optimiser.Recherches DataTable personnalisées
J'ai écrit une fonction pour rechercher une datatable pour les termes dans un tableau. Je retourne ensuite le datatable comme un ensemble de données afin qu'il puisse être lié à un DataGridView. Quelqu'un at-il des idées d'optimisation? Comme il s'agit d'une recherche en temps réel (chaque terme tapé instantanément recherche), je voudrais rendre la fonction aussi vite que possible. La vitesse est déjà assez bonne mais je me suis dit que je devrais vous demander à tous s'il y avait autre chose que je pourrais changer à ce sujet.
- VB.NET
- .NET 2.0
Fonction publique SearchEngine (ByVal Conditions() As String, ByRef ResidentTBL Comme DataTable) Comme DataSet Dim newdts As New DataSet ("Utilisateurs") Dim newtable, tenttable Comme nouveau DataTable Dim residentPassCeiling, tempPassCeiling, termsceiling As Entier residentPassCeiling = ResidentTBL.R ows.Count - 1 termsceiling = Terms.GetUpperBound (0) newtable = ResidentTBL.Clone
For j = 0 To termsceiling
If j < 1 Then
'######################## BEGIN First Pass ########################################################################
For i = 0 To residentPassCeiling
If ResidentTBL.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper = Terms(j).ToUpper Then
'we have an excact match on account skip further additions
newtable.Rows.Clear()
newtable.ImportRow(ResidentTBL.Rows(i))
newdts.Tables.Add(newtable)
Return newdts
Else
If _
ResidentTBL.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.displayName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.sn - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.givenName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.l - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.department - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.telephoneNumber - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
ResidentTBL.Rows(i).Item(TheColumns.building - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Then
'then add to the row
newtable.ImportRow(ResidentTBL.Rows(i))
End If
End If
Next i
'######################## END First Pass ########################################################################
Else
'######################## BEGIN Second.. Pass(es) ########################################################################
'Further searches we want to search the already filtered datatable from each term
temptable = newtable.Clone
temptable = newtable.Copy
newtable.Clear()
tempPassCeiling = temptable.Rows.Count - 1
For i = 0 To tempPassCeiling
If temptable.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper = Terms(j).ToUpper Then
'we have an excact match on account skip further additions
newtable.Rows.Clear()
newtable.ImportRow(temptable.Rows(i))
newdts.Tables.Add(newtable)
Return newdts
Else
If _
temptable.Rows(i).Item(TheColumns.AccountName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.sn - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.givenName - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.l - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.department - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.telephoneNumber - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Or _
temptable.Rows(i).Item(TheColumns.building - 1).ToString.ToUpper Like Terms(j).ToUpper & "*" Then
'then add to the row
newtable.ImportRow(temptable.Rows(i))
End If
End If
Next i
temptable = Nothing
'######################## END Second.. Pass(es) ########################################################################
End If
Next j
newdts.Tables.Add(newtable)
ResidentTBL = Nothing
Return newdts
newdts = Nothing
End Function
Si vous ne voulez pas envisager de changer vous avez probablement déjà votre réponse sur toutes les optimisations disponibles. –