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

 

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

COM+ Singleton ή Application-wide in-memory store

Îåêßíçóå áðü ôï ìÝëïò anjelinio. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 25-07-2005, 15:55. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-07-2005, 14:34 3791

    COM+ Singleton ή Application-wide in-memory store

    Καλησπέρα παιδιά.

    Έχω την εξής απορία. Έχω ένα component το οποίο χρησιμοποιούμε πάρα πολύ για development. Αυτό λοιπόν το component είναι Singleton. Επίσης, κάνει initialize τον εαυτό του απο 1 xml file, το οποίο υπάρχει περίπτωση να είναι αρκετά μεγάλο ( αρκετά μεγάλο ώστε να αναγκαστεί κανείς να το κάνει deserialize σε objects στη μνήμη για να τρώει λιγότερο χώρο και processing time ... )

    Θα ήθελα να γράψω ένα wrapper γύρω απ'το component, ο οποίος θα τρέχει κάτω απο COM+. Αλλα ...

    1. Με τίποτα δε θα ήθελα να γίνεται instantiate κάθε φορά ένα νέο instance το οποίο θα πρέπει να κάνει initialize απ'την προαναφερθείσα xml ... θα ήταν major performance killer κάτι τέτοιο. Άρα, κάτι σαν COM+ Singleton θα ήταν θεμιτό.

    2. Θα προτιμούσα το component αν και όχι Singleton, να διαβάζει όλη αυτή την deserialized πληροφορία απ'τη μνήμη, όπου είναι αποθηκευμένη σε κάτι ανάλογο του Application State π.χ. όπως σε ένα Web Project ( Προσοχή, ανάλογο, όχι ΣΤΟ Application State, γιατί σε αυτή την περίπτωση θα έπρεπε αναγκαστικά να παίζω μόνο σε Web Apps .. a definite no-no ... :) )

    Όντας .. νιούπης στο COM+, πραγματικά δεν ξέρω ποιά απο τις 2 λύσεις είναι πιο εφαρμόσιμη ( π.χ. αν θέσω στο component μου pool size 1, ίσως ρίξω το performance σημαντικά σε peak load καταστάσεις χωρίς κανένα λόγο ... ) και θα εκτιμήσω όλες τις γνώμες / υποδείξεις.

    Ευχαριστώ, και καλή μας εβδομάδα



    Angel
    O:]
  •  25-07-2005, 15:02 3797 σε απάντηση της 3791

    Απ:COM+ Singleton ή Application-wide in-memory store

     Μπορείς να ορίσεις το αντικείμενο pooled με 1 instance. Αυτό θα δημιουργείται όταν ξεκινάει το COM+ application και θα παραμένει στη μνήμη μέχρι να το κλείσεις. Αυτή είναι ίσως και η πιο απλή λύση. Άλλες λύσεις όπου θα αποθηκεύεις τις πληροφορίες στη μνήμη δεν είναι και τόσο scaleable γιατί θα πρέπει να ελέγχεις την ταυτόχρονη πρόσβαση στη μνήμη από πολλά αντικείμενα. Υπάρχει το "Shared Property Manager" γι αυτή τη δουλειά αλλά δεν θεωρείται και πολύ scalable. Θα βρεις τις κατάλληλες κλάσεις στο System.EnterpriseServices.SharedProperty***


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-07-2005, 15:27 3798 σε απάντηση της 3797

    Απ:COM+ Singleton ή Application-wide in-memory store

    Σε ευχαριστώ Πάνο.

    Το pooled με 1 instance με φοβίζει λίγο είναι η αλήθεια. Ίσως "μπουκώσει" κάποια στιγμή (φοβάμαι), αλλά δεν το έχω δοκιμάσει κιόλας για να ξέρω ακριβώς τα όριά του ...

    Απ'την άλλη, το shared memory μου έκανε σαν καλή λύση, κυρίως γιατί η shared πληροφορία δεν αλλάζει ποτέ, είναι read-only. ( Οπότε ίσως την "παλέψω" χωρίς το άγχος του locking και sync-ing ... )

    Φαντάζομαι τελικά θα δοκιμάσω και τα δύο με κάποιο stress-test προγραμματάκι που θα γράψω όπου και θα τα κοπανάω ανελέητα και θα κάνω τις συγκρίσεις μου ;)


    Angel
    O:]
  •  25-07-2005, 15:55 3808 σε απάντηση της 3798

    Απ:COM+ Singleton ή Application-wide in-memory store

    Πρόσεχε γιατί το SPM επηρεάζεται από το activation των components που το καλούνε και τα transactions, ενώ ένα pooled component είναι πολύ πιο απλό. Φτάνει βέβαια το component μην έχει και βαρύ initialization και βαρειές μεθόδους (αλλά αυτό θα σήμαινε ότι κάτι περίεργο συμβαίνει με τη σχεδίαση). Θα πρέπει να σκεφτείς επίσης ΠΟΙΟΣ θα κάνει initialize τα properties?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems