Έγραψα ένα απλό μάθημα βοήθειας καταγραφής πριν, αντιγραμμένο από άλλο πλαίσιο και το τεστ δεν είναι εύκολο στη χρήση, ως εξής:
Αυτό το άρθρο υλοποιεί εκ νέου μια απλή κλάση καταγραφής που βασίζεται στο BlockingCollection.
Το BlockingCollection<T> είναι μια κλάση συλλογής ασφαλούς νήματος που παρέχει τις ακόλουθες λειτουργίες:
Εφαρμόστε το μοντέλο κατασκευαστή-χρήστη. Προσθέστε και ανακτήστε στοιχεία ταυτόχρονα μέσω πολλαπλών νημάτων. Προαιρετική μέγιστη χωρητικότητα. Όταν η συλλογή είναι άδεια ή γεμάτη, μπλοκάρεται με λειτουργίες εισαγωγής και αφαίρεσης. Οι προσπάθειες εισαγωγής και κατάργησης δεν αποκλείονται ούτε πραγματοποιούνται για μια καθορισμένη χρονική περίοδο. Το Encapsulation υλοποιεί οποιονδήποτε τύπο συλλογής IProducerConsumerCollection<T> Χρησιμοποιήστε την ετικέτα ακύρωσης για να εκτελέσετε την ενέργεια ακύρωσης. Υποστηρίζονται δύο τύποι απαρίθμησης που χρησιμοποιούν foreach (στη Visual Basic, For Each): απαρίθμηση μόνο για ανάγνωση. Μια απαρίθμηση που καταργεί ένα στοιχείο κατά την απαρίθμησή του.
Η Microsoft παρουσιάζει:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Το BlockingCollection είναι μια ουρά αποκλεισμού ασφαλούς νήματος, η οποία χρησιμοποιεί αυτή τη δυνατότητα για την υλοποίηση της λειτουργίας παραγωγού-καταναλωτή εντός της διαδικασίας, όπως προώθηση μηνυμάτων, καταγραφή κ.λπ.
Καλέστε τη μέθοδο Προσθήκη για να προσθέσετε πληροφορίες στην ουρά και όταν η ουρά δεν έχει μηνύματα, το IsCompleted θα αποκλείει πάντα τον βρόχο while, επομένως δεν θα προκαλεί νεκρό βρόχο. Όταν βγει ένα νέο μήνυμα, το IsCompleted in while θα ενεργοποιηθεί και θα επιστρέψει τον τύπο bool, προκαλώντας τη συνέχιση της εκτέλεσης, δηλαδή την ανάκτηση δεδομένων από το νήμα.
Προηγουμένως, αποκλείσαμε το νήμα καλώντας τη μέθοδο WaitOne του ManualResetEvent, καλώντας τις μεθόδους Reset και Set για να περάσουμε το σήμα, ως εξής:
Η δοκιμή γράφει 10,000 αρχεία καταγραφής, κάτι που διαρκεί λιγότερο από 10 χιλιοστά του δευτερολέπτου, όπως φαίνεται στο παρακάτω σχήμα:
Ο κωδικός έχει ως εξής:
Λήψη πηγαίου κώδικα:
Τουρίστες, αν θέλετε να δείτε το κρυφό περιεχόμενο αυτής της ανάρτησης, παρακαλώ Απάντηση
|