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

 

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

Linq in memory performance

Îåêßíçóå áðü ôï ìÝëïò Χρήστος Γεωργακόπουλος. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 10-12-2008, 08:30. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-11-2008, 15:50 46170

    Linq in memory performance

    Hello πάλι, περιπέτειες με linq:

    Είχα να κάνω ένα batch insert σε ένα πινακάκι, περίπου 100K εγγραφές. Το insert το έκανα με SqlBulkCopy. Μέσα στο loop των εγγραφών όμως έκανα ένα lookup σε ένα άλλο πινακάκι (των 200 εγγραφών) που ήταν φορτωμένο με linq (όλα τα lookups μέσα στο ίδιο context βεβαίως). Το performance ήταν αισχρό, περίπου 10sec για 1000 rows. Έτρεξα και profiler, το μόνο που είδα ήταν περιοδικά counts που έκανε το linq στον lookup πίνακα κάθε λίγα δευτερόλεπτα (περιοδικά, όχι σε κάθε lookup).

    Έχοντας λοιπόν κάνει optimize τον κόσμο όλο και μην μπορόντας να βρω άκρη, έτρεξα ant profiler, ο οποίος έβγαλε ένα χέρι από την οθόνη και μου είπε "Αυτός" δείχνοντας το linq lookup με τον αριθμό 99%!!!. Indeed, μόλις φόρτωσα το lookup σε ένα hash table, το performance πήδηξε στα 5 sec για το σύνολο των 100.000 εγγραφών.

    Και ερωτώ, γιατί; Τι δεν κάνω καλά;

    Το linq lookup που αναφέρω είναι: From c In Context.Countries Where c.A2 = a2

    Πως μπορώ να φέρω μια εγγραφή σε normal χρόνους; Δεν βρίσκω κάτι της προκοπής στο web...

    Χρήστος Γεωργακόπουλος
    Δημοσίευση στην κατηγορία:
  •  15-11-2008, 16:39 46237 σε απάντηση της 46170

    Απ: Linq in memory performance

    Να ρωτήσω εγώ αφελέστατα αν κάθε φορά που χρειάζεσαι το lookup ουσιαστικά διαβάζεις από τη βάση?
    Αυτο που θα έπρεπε να κάνεις είναι να έχεις φορτώσει στη μνήμη το lookup και να το χρησιμοποιείς από εκεί (όπως έχεις κάνει με το hastTable). To


    Γιώργος Σακαλής
  •  17-11-2008, 20:27 46271 σε απάντηση της 46237

    Απ: Linq in memory performance

    Από τη στιγμή που βρίσκομαι μέσα στο ίδιο context, γίνεται αυτόματα caching και δεν το φορτώνει το linq. Tο θέμα είναι ότι το linq αρχεί να κάνει search μέσα στα cacharισμένα δεδομένα τα οποία είναι πολύ λίγα για να έχω τέτοια καθυστέρηση...

    Χρήστος Γεωργακόπουλος
  •  10-12-2008, 08:30 46818 σε απάντηση της 46271

    Απ: Linq in memory performance

    Δοκίμασε αυτό: "How to: Retrieve Information As Read-Only (LINQ to SQL)"

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems