DataGrid : problème incompréhensible [C#] - C#/.NET managed - Programmation
Marsh Posté le 13-04-2005 à 10:05:34
Envoi au moins un bout de code du remplissage de tes datagrids, ça aidera
Marsh Posté le 13-04-2005 à 10:50:02
Yep, voilà :
Code :
|
Le comportement est le suivant :
Affichage en boucle de la ligne : « Console.WriteLine("ienum.MoveNext()..."+zar+++"-"+zor++); »
Freeze du programme et travail processeur
Affichage de la ligne : « Console.WriteLine("FGTrans_dgDocEmis" ); »
Et le reste sans problèmes jusqu'à l'avant dernière ligne de ma fonction où j'affiche "Fini"
J'ai essayé la mise à jour de trois manières différentes (deux sont commentées), avec et sans type booléen et rien n'y fait.
Je peux mettre aussi la déclaration du DataTable s'il faut...
Marsh Posté le 13-04-2005 à 10:56:13
Et avec un Profiler, c'est quelle instruction qui prend des plombes ?
Marsh Posté le 13-04-2005 à 11:51:23
FlorentG a écrit : Et avec un Profiler, c'est quelle instruction qui prend des plombes ? |
Hummm je vais d'abord chercher ce qu'est un Profiler...
Marsh Posté le 13-04-2005 à 12:17:07
Gaxx a écrit : Hummm je vais d'abord chercher ce qu'est un Profiler... |
Trouvé via ce topic :
http://forum.hardware.fr/forum2.ph [...] subcat=405
DL lancé, je testerai cet après midi.
Marsh Posté le 13-04-2005 à 16:24:48
Le profiler de DevPartner me dit que le maillon faible est :
Count | % with children | Time | Source
15 | 1,4 |4778,3 | dtTmp.Rows.Add( new Object[]{ false, stmp, stmp2[0], stmp2[1], stmp2[2], stmp2[3] } );
Il l'a marque en rouge.
Marsh Posté le 13-04-2005 à 16:27:07
Avec nprof, tu peux voir le détail, aller très profond dans les fonctions appellée, histoire de voir laquelle est vraiment fautive
Marsh Posté le 13-04-2005 à 16:30:08
FlorentG a écrit : Avec nprof, tu peux voir le détail, aller très profond dans les fonctions appellée, histoire de voir laquelle est vraiment fautive |
Je vais le DL pour voir.
En décomposant le remplissage colonne par colonne, le pb vient de
15 1,4 4631,3 DataRow drTmp=dtTmp.NewRow();
Marsh Posté le 13-04-2005 à 16:42:55
FlorentG a écrit : Au fait, pourquoi utilise-tu des DataTable temporaires ? |
Bah parceque je préfères gérer mes accès à la bdd en code plutôt qu'avec les assistants, et donc je n'ai que mes datagrid sur l'interface. Et les dataset sont des variables d'instance de la form.
Dans ma fonction qui remplit mes datagrid, nprof me donne cela :
Signature | # of calls | % of total | %of parent |
void System.Data.DataTable::EndLoadData() | 6 | 21.09 | 99.04 |
Marsh Posté le 13-04-2005 à 17:10:35
FlorentG a écrit : Mouais, j'vois pas trop l'interêt |
Je ne pense pas que mon choix soit meilleur que de passer l'assistant mais je construit mes requêtes moi même, et donc je sais ce qui transite par le réseau.
Je me suis basé sur un autre projet que j'avais fait en gardant la même méthode. A l'époque le base que j'utilisait était tellement bordélique que j'avais préféré faire mes requêtes moi même.
Une idée pour le ralentissement ?
Marsh Posté le 13-04-2005 à 23:24:34
En fait je voulais dire pourquoi ne fout-tu pas la table directement comme DataSource du DataGrid, ou un DataView associé ?
Sinon y'a combien d'enregistrements ? Parce que EndLoadData réactive certains trucs comme les contraintes, du coup le machin s'amuse à tester chaque ligne pour voir si les contraintes sont respectées
Marsh Posté le 14-04-2005 à 10:34:37
FlorentG a écrit : En fait je voulais dire pourquoi ne fout-tu pas la table directement comme DataSource du DataGrid, ou un DataView associé ?Sinon y'a combien d'enregistrements ? Parce que EndLoadData réactive certains trucs comme les contraintes, du coup le machin s'amuse à tester chaque ligne pour voir si les contraintes sont respectées |
Bah parceque je voulais respecter ce que je croyais être les règles ... Il va falloir que je reprenne mon code pour virer tous mes DataSet inutiles !
En passant directement le datatable au DataGrid rien ne change, de même en virant BeginLoadData et EndLoadData j'ai le même ralentissement.
Mais là je pense que ça vient du tri effectué lors des insertions.
Parcours en profondeur des fonctions à gros temps d'exécution :
remplirComposantsGraphiques()
DataRowCollection.Add() : 99.33% of parent
DataTable.AddRow() : 99.90%
DataTable.InsertRow() : 99.98%
DataTable.SetNewRecord() : 99.91%
DataTable.RecordStateChanged() : 99.81%
Data.Index.RecordStateChanges() : 99.99%
Data.Index.ApplyChangeAction() : 99.98%
Data.Index.InsertRecord() : 99.96%
Data.Index.OnListChanged() : 99.99%
DataViexListener.IndexListChanged() : 99.99%
...
Marsh Posté le 13-04-2005 à 10:02:40
Bonjour,
Jai un soucis de mise à jour de datagrid (validation d'ajout de lignes dans le datatable correspondant) : dans mon programme jutilise 3 datagrid, à chaque datagrid correspond un dataset en variable dinstance. Pour le remplissage et la mise à jour de mes datagrid jutilise systématiquement un datatable temporaire défini dans mes fonctions.
Le remplissage de mes datagrid se fait sans erreurs mais pour lun des trois datagrid mon programme met un temps relativement long. Cela se passe toujours sur le même datagrid quelque soit lodre de remplissage des datagrid. Mon programme freeze et le proc est utilisé à fond (50% sur un P-IV HT) puis fini laffichage.
Par contre, ma mise à jour se fait normalement (aucun freeze).
Mon problème nest pas bloquant mais il est gênant et semble être corrigible.
Si quelqu'un peut m'aider à trouver le problème...
Par avance merci,
Gaxx