mysql / treeview optimisation
Bonjour,
Déjà je m'excuse d'avance si la question a déjà était posée, mais je n'ai rien trouvé correspondant à mon problème.
Mon problème se situe à deux niveaux :
1) La récupération des données depuis MySql dans un dataset
2) L'affichage du dit dataset sous la forme d'un treeview trié
Lors de mes phases de tests sur l'utilisation des treeview, cela ne m'a posé aucun soucis. Le problème est lorsque je vais tester sur une base de données correspondant à la réalité.
Je dois récupérer environ 2,5 millions de ligne et les afficher sur 3 niveaux.
1) La récupération me prends environ (4 minutes oui c'est énorme je sais :) ) alors que la requête en ligne de commande ne prends pas plus de 6 secondes
Voici le code que j'utilise:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| public DataSet mysqlselectinto(string nomU, string requete, DataSet dataset)
{
MySqlConnection myConnection;
string exception="";
MySqlDataAdapter myAdapter;
string strConnect, strSQL;
strConnect = "Server=MonIp" +
";Database=test_treeview" +
";User ID=laloose" +
";Password=camarchepo;";
strSQL = requete;
///Connexion à la base de donnée
///
try
{
myConnection = new MySqlConnection(strConnect);
myConnection.Open();
}
catch (MySqlException myEx)
{
exception = "ERROR " + myEx.Message.ToString() + " : Impossible de se connecter à la base de donnée.\n\n";
logwriter(exception, nomU);
return dataset;
}
///Passage de la requête
///
try
{
myAdapter = new MySqlDataAdapter();
myAdapter.SelectCommand = new MySqlCommand(strSQL, myConnection);
myAdapter.SelectCommand.CommandTimeout = 1000;
myAdapter.Fill(dataset);
}
catch (MySqlException myEx)
{
exception = "ERROR " + myEx.Message.ToString() + " : Impossible d'exécuter la requête suivantes : " + requete + "\n\n";
dataset.Tables.Add();
logwriter(exception, nomU);
return dataset;
}
///Deconnection de la base
///
try
{
myConnection.Close();
}
catch (Exception e)
{
exception = "ERROR :" + e.GetType() + " : Impossible de fermer correctement la base de donnée.\n\n";
logwriter(exception, nomU);
return dataset;
}
logwriter(exception, nomU);
return dataset;
} |
Si vous avez des idées pour améliorer la vitesse de remplissage du dataset je prends :)
2) La deuxième partie est "plus simple", quelle est la méthode d'affichage la plus rapide pour créer le treeview ? Je tiens à préciser que par la suite je cherche à obtenir un tableau dans lequel je pourrais gérer la disposition des colonnes et dans lequel mon treeview apparaitra cf screenshoot)
http://www.images-host.org/img/9155a...n_treeview.png
Voilà si vous avez des idées, des suggestions je suis preneur :)
Merci d'avance pour vos réponses