Εξετάσαμε ορισμένες δημοσιεύσεις ιστολογίου στο διαδίκτυο σχετικά με την αποθήκευση του Stream σε ένα αρχείο,Πολλά είναι λανθασμένα。 (Βρήκα πολλά προβλήματα: κακή απόδοση, μη φυσιολογική όταν το ρεύμα είναι πολύ μεγάλο)
Αφού λάβετε μια ροή, πώς να αποθηκεύσετε κομψά αυτήν τη ροή στον κώδικα
Η πιο κομψή μέθοδος θα πρέπει να είναι μέσω της μεθόδου CopyTo ή CopyToAsync
εδώ inputStream.Seek(0, SeekOrigin.Begin); Όχι απαραίτητα, χρησιμοποιήστε αυτόν τον κωδικό σύμφωνα με τις δικές σας ανάγκες, όπως χρειάζεται μόνο να αντιγράψετε τη ροή από το 10ο byte κ.λπ
Η χρήση της ασύγχρονης προσέγγισης θα διαρκέσει λίγο περισσότερο για αυτήν την εγγραφή, αλλά θα δώσει τη συνολική απόδοση καλύτερη και θα επιτρέψει στην CPU να χειριστεί άλλες εργασίες
Σημειώστε ότι όταν χρησιμοποιείτε το CopyToAsync, θυμηθείτε να προσθέσετε αναμονή, κατά την εκτέλεση αυτού του κώδικα, θα παραδώσετε την εκτέλεση στο IO, οι περισσότερες επεξεργασίες IO δεν απαιτούν CPU για τον υπολογισμό, έτσι ώστε η συνολική απόδοση να είναι καλύτερη
Επίσης, εάν το iputStream έρχεται από έξω, τότε δεν συνιστώ να το απελευθερώσετε μέσα σε αυτήν τη μέθοδο, γιατί; Χρησιμοποίησα ένα καλό ρυάκι και σκοτώθηκε όταν πέρασα σε μια επιχείρηση
Η δεύτερη μέθοδος είναι να ελέγξετε μόνοι σας την κρυφή μνήμη αναπαραγωγής, η οποία θα έχει ένα επιπλέον αντίγραφο μνήμης
Αυτό που κάνει αυτή η μέθοδος είναι να σας επιτρέπει να τροποποιήσετε την τιμή του νέου byte[1024], δίνοντάς σας τον έλεγχο της αντιγραμμένης κρυφής μνήμης
Ακολουθούν ορισμένες μέθοδοι που δεν συνιστώνται, αλλά είναι βολικές όταν γράφετε
Η παραπάνω μέθοδος θα αντιγράψει τη μνήμη δύο φορές και εάν το μήκος του πόρου εισόδου είναι 1G, θα καταλάβει πόρους 2G
Παρόμοια με τα παραπάνω είναι να ζητήσετε μια μεγάλη κρυφή μνήμη, όπως φαίνεται στον παρακάτω κώδικα
Όσον αφορά την αποτελεσματικότητα και την κομψότητα του κώδικα, είναι στην πραγματικότητα κατώτερα από τη μέθοδο CopyTo και λόγω ροής. Το μήκος ως μήκος δεν καθορίζει την κρυφή μνήμη, επομένως δεν είναι τόσο καλή όσο η δεύτερη μέθοδος
Παρακάτω είναι μια εξαιρετικά αργή μέθοδος, η εγγραφή ενός byte προς ένα byte είναι εξαιρετικά αργή
Μεταφέρθηκε από:Η σύνδεση με υπερσύνδεσμο είναι ορατή. (Τέλος)
|