Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Καθυστέρηση σε DataGridView

Îåêßíçóå áðü ôï ìÝëïò jim299. Τελευταία δημοσίευση από το μέλος teliaz στις 22-11-2008, 03:47. Υπάρχουν 9 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-07-2008, 20:20 43391

    Καθυστέρηση σε DataGridView

    Καλησπέρα σε όλους, έχω δημιουργήσει μία φόρμα σε VC++ .ΝΕΤ στην οποία έχω προσθέσει ένα DataGridView control. Λαμβάνω εγγραφές από μία MySql βάση δεδομένων και τις εμφανίζω στο DataGridView. Όταν κάνω scroll πάνω/κάτω ή δεξιά/αριστερά αργούν να εμφανιστούν οι εγγραφές. Φαίνεται αισθητά η επανεσχεδίαση του DataGridView.
    Με ποιο τρόπο μπορώ να κάνω το DataGridView να μην εμφανίζει αυτή την καθυστέρηση;

    Ευχαριστώ εκ των προτέρων για το χρόνο σας.
  •  10-07-2008, 21:22 43394 σε απάντηση της 43391

    Απ: Καθυστέρηση σε DataGridView

    Αρχικά για να δώσει κάποιος μια απάνηση πρέπει να δει πως έχει υλοποιηθεί η εφαρμογή.

    επίσης έχει σημασία πόσες εγγραφές φέρνεις στο datagridview.... αν φέρνεις 10.000 rows τοτε....

     

    1)βασικά πρέπει να φέρνεις πολλά δεδομένα και καταναλώνεται πολύ μνήμη και να έχει άμεσο αντίκτυπο στο πως αντιδράει το UI.

    2) με λίγο Googling είδα ότι όμως και άλλοι παραπονιούνται για το Datagridview rendering

    δες λίγο εδώ

    http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=117093

    για να μην χαθείς σε όλα αυτά που θα διαβάσεις δες αυτά

    The DataGrid control indeed paints faster than the DataGridView control. I invalidate and repaint them entirely 100 times, while 11 x 51 cells are displayed. It turns out that this operation takes 7.5 seconds for the DataGrid and 24 seconds for the DataGridView on my machine.

    I tried to bring this time down by trying a few things:
    - turn off Visual Styles (EnableVisualStyles=false) -> 23 seconds.
    - turn off cell borders (this.dataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None) -> 18 seconds

    δες και αυτό

    http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx

     

    βασικά αν μπορείς χρησιμοποίησε ένα datagrid control χρησιμοποίησε αυτό.


     


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  10-07-2008, 22:23 43398 σε απάντηση της 43394

    Απ: Καθυστέρηση σε DataGridView

    Καταρχήν ευχαριστώ για την άμεση απάντηση.
    Όσο αναφορά την εφαρμογή,

    1) οι γραμμές που κάνω ανάκτηση από τη βάση δεδομένων είναι 350   α/α, επώνυμο και όνομα (είναι λίγες αρκετά και οι γραμμές και οι στήλες ώστε να καθυστερεί η σχεδίαση) .
    Φορτώνονται κανονικά από τη βάση (η ανάκτηση των δεδομένων εκτελείται σε ξεχωριστό thread) χωρίς πρόβλημα. Το πρόβλημα είναι στην σχεδίαση του control. Πιστεύω πως αν οι εγγραφές τοποθετηθούν σε ένα ListView
    control δεν θα υπάρχει αυτό το πρόβλημα.

    2)Στο Google έψαξα αρκετά αλλά δεν βρήκα λύση γιατί όλοι έχουν το ίδιο πρόβλημα.

    3)Επίσης έχω απενεργοποιήσει όλα τα visual effects και ότι έχει σχέση με τη σχεδίαση των γραμμών και των στηλών και το πρόβλημα παραμένει.

    Ευχαριστώ.

  •  11-07-2008, 09:28 43403 σε απάντηση της 43398

    Απ: Καθυστέρηση σε DataGridView

     

    αν θες να αλλάξεις το display control, Τοτε ειναι μια καλη λυση

    αν θες να το ψαξεις λιγο ακομα με datagridview δες λίγο αυτό

    http://www.codeproject.com/KB/grid/DataGridViewPaging.aspx

    εξηγεί πως να παίξεις με datagridview σε virtual mode

    διαβασε και αυτό το οποίο βρήκα σε ένα forum

    "The property GridView.RowCount only sets the number of rows to display. If you change from 1000 to 300 rows, 700 rows are deleted one by one, and 300 old rows are kept.
    If you add another 300 rows, the kept roes are deleted also.
    I guess you should clear the rows collection with DataGridView.Rows.Clear() to get rid of all rows at once."


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  11-07-2008, 12:47 43408 σε απάντηση της 43403

    Απ: Καθυστέρηση σε DataGridView

    Καλημέρα σε όλους, είδα το άρθρο στο code project το οποίο είναι αρκετά καλό. Από την άλλη έκανα το εξής φόρτωσα μόνο 20 εγγραφές στο datagridview και πάλι τα ίδια.Αυτές οι 20 εγγραφές βρίσκονται στη μνήμη οπότε για πιο λόγο να υπάρχει αυτή η καθυστέρηση; Η ανάκτηση γίνεται μέσω ADO .NET, ανοίγω σύνδεση, διαβάζω τις εγγραφές,κλείνω τη σύνδεση και μετά τις εμφανίζω στο datagridview.Αυτό σημαίνει πώς η σύνδεση δεν επηρεάζει κάθολου την όλη καθυστέρηση. Με 20 γραμμές και όταν αλλάζεις το μήκος της στήλης ή να κάνεις scrolling και να υπάρχει καθυστέρηση που φαίνεται... νομίζω ότι πάει πολύ...

    Δεν ξέρω τι άλλο να κάνω!!!
    Ευχαριστώ.
  •  11-07-2008, 17:40 43409 σε απάντηση της 43408

    Απ: Καθυστέρηση σε DataGridView

    Γεια σου.

    Έχεις δίκιο σε αυτά που γράφεις. Η συμπεριφορά του DGV είναι απαράδεκτη για τις εγγραφές που έχεις, όμως ας μην προτρέξουμε να το κατακρίνουμε, μιας και εγώ ο ίδιος, αλλά και πολύ άλλη φαντάζομαι, το έχω δει με τα μάτια μου να συμπεριφέρεται όπως πρέπει σε πολύ μεγαλύτερο αριθμό εγγραφών. Ίσως να είναι το μηχάνημα και όχι το control. Κοίταξέ το και αυτό... Κάποιες ρυθμίσεις των Windows για το πως να εμφανίζονται κάποιες γραμματοσειρές ή κάτι άλλο να επηρεάζει το DGV. Το αναφέρω γιατί είχα αντιμετωπίσει κάτι παλιότερα πάνω σε αυτό το σημείο.

    Βασικά μόνο αυτό έχω να σου προτείνω, δεν γνωρίζω όμως τι θα μπορούσε να πηγαίνει στραβά σε τόσες λίγες εγγραφές.

  •  11-07-2008, 17:49 43410 σε απάντηση της 43409

    Απ: Καθυστέρηση σε DataGridView

    Ευχαριστώ InfoCenter,
    Εάν βάλω αρκετές εγγραφές σε ένα ListView control τότε όλα είναι μία χαρά. Μόνο στο datagridview συμβαίνει αυτό. Από την άλλη το μηχάνημα είναι ένα ACER Aspire 7720 με επεξεργαστή Τ7300 στα 2 GHz, 4Μb L2 cache και 4Gb Ram. Δε νομίζω πως μπορεί να φταίει το μηχάνημα.
  •  11-07-2008, 18:54 43411 σε απάντηση της 43410

    Απ: Καθυστέρηση σε DataGridView

    Έγκατέστησα το πρόγραμμα σε ένα άλλο μηχάνημα στο δίκτυο και λύθηκε το πρόβλημα. Δεν υπάρχει καθυστέρηση στη σχεδίαση του datagridview (οπότε τελικά πρέπει να κοιτάξω το δικό μου laptop...).
    Όταν βρω τι φταίει θα κάνω post τη λύση.

    Ευχαριστώ τα μέλη nikolaosk και infoCENTER για το χρόνο που αφιέρωσαν στο προβλήμα μου.


  •  11-07-2008, 19:57 43412 σε απάντηση της 43411

    Απ: Καθυστέρηση σε DataGridView

    Μάλλον βρήκαμε την αιτία του κακού. Μία διόρθωση μόνο, δεν μίλησα για το spec του μηχανήματός σου αλλά για ρυθμίσεις των Windows. Μιας λοιπόν που οδηγούμαστε προς τα εκεί ρίξε μία ματιά για το αν έχει γίνει Modified το Display Properties --Appearance των Windows. Το δικό μου πρόβλημα που αντιμετώπισα είχε να κάνει με τις γραμματοσειρές που είχε ορίσει ο χρήστης να φαίνονται στο PC του και το μέγεθος που θα έχουν. Όταν ρύθμισα το παραπάνω έπαιζε κανονικά.

  •  22-11-2008, 03:47 46413 σε απάντηση της 43412

    Απ: Καθυστέρηση σε DataGridView

    Προσοχή όταν ένα DataGridView επιστρέφει πολλά αποτελέσματα καλό είναι να μην χρησιμοποιείς το AutoSizeColumnsMode σε AllCells, γιατί απλά θα σέρνεται. Αν έχεις πρόβλημα και θέλεις να κάνει Αυτόματα Stretch το Gridακι καλό ειναι να χρησιμοποιήσεις FillWeight σε κάθε ένα Column.
    Anchor σε Left-Right και το απότέλεσμα είναι καλύτερο ακόμα και αν έχεις σχεδιάσει Liquid Forms.



Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems