Optimisation application C#

soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011 - 28 déc. 2009 à 20:30
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011 - 28 déc. 2009 à 21:36
Salut a tous,

Je viens de terminer mon application, mais je constate quelques erreurs.
J'ai une stratégie qui au fond me semble moins sécurisante et pas très optimale.
En effet, une interface permet de filtrer des données contenues dans une table. et grâce à un combobox, l'utilisateur indique une valeur, ensuite le clic de validation de cette valeurs numérique permets dans la base de données de supprimer les données dont l'indice est <= a la valeur dans le combobox, de charger de nouvelle donnees dans une nouvelle table, ensuite d'afficher :

0- truncate table Data_deleted

1- insert into Data_deleted select * from DATACOMPLETE where TOT_Percent <= @Comboboxvaleur

permet de conserver dans une table les valeurs supprimées par l'utilisateur

2- truncate table Data_Saved

3- Insert into Data_Saved select * from DATACOMPLETE where TOT_Percent >= @Comboboxvaleur

permet d'insérer dans une table les données qu'on va traiter plus tard. Ensuite, les données de cette table sont utilisées pour des jointures. Mais, au final, je me retrouve avec beaucoup de truncate, insert si l'utilisateur doit faire autant de clic de validation pour des valeurs recherchées. Et, je realise que des insert ne se font pas.

voici un bout du code que j'utilise:

MyControl.ExecuQuerys(" Truncate table TSH_REVIEW_REL ");

if (CkxTSHsup.Checked == true)
{
//Un select avec parametre
MyControl.ExecuScolared(" insert into Data_deleted select * from DATACOMPLETE where [TAUX_SUCCES(%)] <= @NumVal order by CELLULE ", TxtBxTSHsup.Text);

CountIdentif_SQL = "select count(*) from Data_deleted";

MessageBox.Show(" Confirmation de " + MyControl.ExecScalar(CountIdentif_SQL).ToString() +
" relations voisines effectuée avec succès. ", " Nouveau plan de voisinage ...", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

La question que je me pose, y aurait-il un moyen plus efficace de gérer ce problème
comme par exemple, stocker les données dans un datatable, travailler avec, et ensuite les enregistrer dans la base de données a la fin, ou autre que j'ignore encore.

2 réponses

soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
28 déc. 2009 à 21:17
Toujours dans le cap de mon soucis, je me demande s'il ne serait pas possible d'améliorer simplement mes méthode d'insertion. C'est vrai, je suis parvenu à résoudre toute mon application avec seulement des requêtes SQL que j'appelle ensuite en code C#; mais, en terme de performance, je me retrouve devant une application pour laquelle l'exécution des requêtes plante l'application jusqu'à ce que les résultats s'affichent dans mes datagridview. Et, en plus, après l'affichage sans problème des résultats (à part les frises de l'application), les ligne sont tellement nombreuses, que j'ai du mal à parcourir les données affichées dans le datagridview; c'est un peu comme si mon application ramait finalement.

1- Pour la question de l'exécution des requêtes qui fait bloquer mon application, je pensais créer des méthodes qui exécuteraient chaque requête dans un thread différent, mais, je suis pas parvenu; ou encore, je suis parvenu à optmiser le temps d'exécution de mes requêtes, mais, je voulais faire un progress bar pour distraire le temps d'attente de l'utilisateur au cours de l'exécution des requêtes, mais je ne suis pas non plus parvenu!

Vivement que toute la communauté m'aide à résoudre ces petites et grosses questions qui feront la convivialité de mon application que je dois rendre debut Janvier au plus tard.

Je suis preneur des idées, suggestion, posts, et toute autre aide substantielle.
0
soupiste Messages postés 79 Date d'inscription samedi 12 avril 2008 Statut Membre Dernière intervention 22 juin 2011
28 déc. 2009 à 21:36
Mes recherches sont en train de me conduire vers l'utilisation pure des dataset et datatable. Au lieu de travaille sur mes tables directement dans la base, pourquoi ne pas le faire sur mon dataset ou datatable, vu que mes données sont toutes enrichissent toutes un datatable au moins via l'exécution de la requète. Exemple :

try
{
//Un select avec parametre
CmdSelect new SqlCommand("select ROW_NUMBER() OVER(ORDER BY CELLULE) RANG, LADATE, SBS_Name, TARGET_CELL, CELLULE, [ETAT DE SYMETRIE] from dbo.ALL_ASYMETRIES where CELLULE @CellServ", MaConnect);
CmdSelect.CommandType = System.Data.CommandType.Text;

//on crée le parametre
SqlParameter param = new SqlParameter("@CellServ", SqlDbType.VarChar);
param.Value = txt_CategoryId.Text;
CmdSelect.Parameters.Add(param);
//on utilise le dataadapter pour remplir le dataset
//on attribue la command au SelectCommand
MonDataAdapter = new SqlDataAdapter(CmdSelect);
//on vide le DataTable de son contenu
ds.Tables["LIST_Des_ADJACENCES"].Clear();
//ds.Clear();
//On rempli le dataset
MonDataAdapter.Fill(ds.Tables["LIST_Des_ADJACENCES"]);
//on affecte le datasource du datagrid afin de visualiser les données
ResultOMC.DataSource = ds.Tables["LIST_Des_ADJACENCES"];
CM = (CurrencyManager)BindingContext[ds.Tables["LIST_Des_ADJACENCES"]];
//MessageBox.Show(label3.Text + " " + "identifiée(s)");
NbreAsymétrie();
}
catch (Exception xcp)
{
MessageBox.Show(xcp.Message);
}

des idées s'il vous plait !
0
Rejoignez-nous