IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

DataGridView rapide, puis lente


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Par défaut DataGridView rapide, puis lente
    Salut,

    je suis face a un probleme qui me laisse plutot perplexe.
    Dans mon projet je doit afficher un certain nombre de donnees dans un DataGridView. Lors du lancement de l'application tout ce passe bien. Je precise que je dois proceder cellule par cellule car je dois par exemple changer le style quand une cellule contient un nombre negatif ou positif (je dois avoir 350 * 15 cellules environs).Enfin tout marche bien lors du premier lancement j'ai moins de 2sec pour l'affichage ce qui est acceptable.

    Par la suite j'effectue un traitement des donnees et je doit donc rafraichir ma grille mais la...catastrophe la mise a jours des couleurs prend 6sec alors que precedememt j'avais pour moins de 2sec:
    - Receptions des donnees depuis le reseau
    - Traitememt des donnees
    - Chargements des donnees dans la grille
    - Mise a jours des couleurs

    je suis a bout de solutions, quelqu'un a t-il une idee ?

    Merci d'avance

    ps: Desole pour le manque d'accent je travail sur un clavier anglais !

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Ça dépend comment tu fais pour donner des couleurs à ta grille.

    Si tu manipules directement des DataGridViewCell et des DataGridViewCellStyle, les perfs chutent vite. cf cette doc : http://www.windowsclient.net/Samples...View%20FAQ.doc

    je cite (point 6.1) :
    • Avoid setting cell style properties for individual DataGridViewCell or DataGridViewRow objects. This includes the row object specified by the RowTemplate property. Each new row that is cloned from the row template will receive its own copy of the template's cell style object. For maximum scalability, set cell style properties at the DataGridView level. For example, set the DefaultCellStyle property rather than the DataGridViewCell.Style property.
    • If some cells require formatting other than default formatting, use the same DataGridViewCellStyle instance across groups of cells, rows, or columns. Avoid directly setting properties of type DataGridViewCellStyle on individual cells, rows, and columns. For an example of cell style sharing, see How to: Set Default Cell Styles for the Windows Forms DataGridView Control. You can also avoid a performance penalty when setting cell styles individually by handling the CellFormatting event handler. For an example, see How to: Customize Data Formatting in the Windows Forms DataGridView Control.

  3. #3
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Par défaut
    Je manipule cellule par cellule dans tout les cas.
    Il fait moins de chose lors du second rafraichissement et pourtant il met beaucoup plus de temps. C'est un mystere complet pour moi...

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par EntraX666 Voir le message
    Je manipule cellule par cellule dans tout les cas.
    Bah il faut pas Comme je disais tout à l'heure, plutôt que de toucher au CellStyle associé aux cellules, il faut s'abonner à l'événement CellFormatting de la grille, et modifier l'eventargs associé.

  5. #5
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 23
    Par défaut
    C'est plus rapide comme cela merci bien ! Toutefois le mystere persiste pour moi car les algorithmes sont censes etre deterministe...

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Guuhl: il faut s'abonner à l'événement CellFormatting de la grille, et modifier l'eventargs associé.
    +1, On des temps bien plus rapide que 6 secondes sur du formatting de grid 10 000x15
    Nota : le framework 3.5 améliore les perfs du DGV.
    Toutefois le mystere persiste pour moi car les algorithmes sont censes etre deterministe...
    Que se passe-t-il si tu fais les traitement entre un SuspendLayout et un ResumeLayOut?

  7. #7
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par EntraX666 Voir le message
    C'est plus rapide comme cela merci bien ! Toutefois le mystere persiste pour moi car les algorithmes sont censes etre deterministe...
    Faudrait regarder le source de la DGV pour savoir comment elle fonctionne, mais de ce que je sais, elle n'instancie pas un certain nombre d'objets (les DatagridViewCellStyle et DataGridViewRow notamment) tant que ce n'est pas nécessaire. D'où la propriété IsShared (ou un truc dans le genre) sur les DGVRow. Et il y a peut être un pool ou un dico de ces objets stockés dans la DGV, qui se comporterait de moins en moins bien au fur et à mesure que tu en rajoutes.

    Ce que je veux dire, c'est que la DGV a toute une cuisine interne dont on ignore la complexité algorithmique en fonction des méthodes que l'on appelle. Visiblement, toucher aux DGVCells fait bobo quadratiquement

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/08/2007, 12h00
  2. [C#2.0]Datagridview très lent à s'afficher
    Par doudoustephane dans le forum Windows Forms
    Réponses: 8
    Dernier message: 30/06/2007, 15h48
  3. Réponses: 5
    Dernier message: 18/03/2007, 18h12
  4. procédure stockée parfois rapide, parfois lente
    Par marcouchi dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 10/01/2007, 09h10
  5. Réponses: 8
    Dernier message: 31/10/2003, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo