J'ai écris du code mais il est beaucoup trop lent, j'aurai besoin de l'avis d'experts !
Je souhaiterai écrire un programme qui vérifie chaque entrée d'une vieile base de données (sous access). Cette base de données contient une correspondance @mac / noport pour chaque switch d'une entreprise. J'ai écris du code qui me récupère les informations à jour (via telnet) et me retourne ces informations sous forme d'un tableau de 4 colonnes (vlan, @mac, noport, nomduswitch) et qui fait en général 500 à 800 lignes pour un switch. Il y a une trentaine de switch dans l'entreprise.
Pour cela, j'ai pensé à faire ainsi :
1) Connexion telnet au switch et récupération de la configuration sous forme d'un tableau (~600 lignes)
2) Recopie de ce tableau dans une table
3) On recommence pour tous les autres switchs
4) Requete SQL pour chaque ligne de la vieile table qui vérifie dans la nouvelle table que les informations sont correctes
J'en suis à l'étape 2 et le code que j'ai écris est très lent !! En effet, il faut 1 minute pour recopier un tableau de 800 lignes dans une table !
Je vous met le code pour que vous jetiez un oeil, j'espère que des malins pour m'aguiller !
//On prend toute la table
SqlSearch = "select * from " + listBox_tables.SelectedItem;
//Déclaration du data adapteur
OleDbDataAdapter DtaGrid = new OleDbDataAdapter(SqlSearch, Conn);
//Selection ou ajout de la ligne
DtrGrid = DtsGrid.Tables[Convert.ToString(listBox_tables.SelectedItem)].NewRow();
//On parcourt les valeurs
for (int i = 0; i < DttGrid.Columns.Count; i++)
{
DtrGrid[i] = TabTxtbox[i].Text;
}
//Ajout de la ligne à la table
DtsGrid.Tables[Convert.ToString(listBox_tables.SelectedItem)].Rows.Add(DtrGrid);
//On maj la base
CmdGrid = new OleDbCommandBuilder(DtaGrid);
DtaGrid.UpdateCommand = CmdGrid.GetUpdateCommand();
DtaGrid.Update(DtsGrid, Convert.ToString(listBox_tables.SelectedItem));
j'ai l'impression que tu mets la base à jour à chaque lignes, as-tu essayé de la mettre à jour à la fin du remplissage du dataset, en une seule fois ?
Cela dit, les composants Datadadapter, datagrid et autre dataset, s'ils offrent un haut niveau fonctionel, sont notoirement lents concerant la mise à jour des données.
As-tu penser à generer une grosse requette "insert" à la main?
ou de generer un fichier qui serait importé par un BULK copy ou un BCP?