Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 38466|Απάντηση: 0

[Συμβουλές] Πώς να αποθηκεύσετε μια ροή σε ένα αρχείο σε C#/.NET

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2021-5-16 21:12:58 | | |
Εξετάσαμε ορισμένες δημοσιεύσεις ιστολογίου στο διαδίκτυο σχετικά με την αποθήκευση του Stream σε ένα αρχείο,Πολλά είναι λανθασμένα。 (Βρήκα πολλά προβλήματα: κακή απόδοση, μη φυσιολογική όταν το ρεύμα είναι πολύ μεγάλο)

Αφού λάβετε μια ροή, πώς να αποθηκεύσετε κομψά αυτήν τη ροή στον κώδικα

Η πιο κομψή μέθοδος θα πρέπει να είναι μέσω της μεθόδου CopyTo ή CopyToAsync


εδώ inputStream.Seek(0, SeekOrigin.Begin); Όχι απαραίτητα, χρησιμοποιήστε αυτόν τον κωδικό σύμφωνα με τις δικές σας ανάγκες, όπως χρειάζεται μόνο να αντιγράψετε τη ροή από το 10ο byte κ.λπ

Η χρήση της ασύγχρονης προσέγγισης θα διαρκέσει λίγο περισσότερο για αυτήν την εγγραφή, αλλά θα δώσει τη συνολική απόδοση καλύτερη και θα επιτρέψει στην CPU να χειριστεί άλλες εργασίες




Σημειώστε ότι όταν χρησιμοποιείτε το CopyToAsync, θυμηθείτε να προσθέσετε αναμονή, κατά την εκτέλεση αυτού του κώδικα, θα παραδώσετε την εκτέλεση στο IO, οι περισσότερες επεξεργασίες IO δεν απαιτούν CPU για τον υπολογισμό, έτσι ώστε η συνολική απόδοση να είναι καλύτερη

Επίσης, εάν το iputStream έρχεται από έξω, τότε δεν συνιστώ να το απελευθερώσετε μέσα σε αυτήν τη μέθοδο, γιατί; Χρησιμοποίησα ένα καλό ρυάκι και σκοτώθηκε όταν πέρασα σε μια επιχείρηση

Η δεύτερη μέθοδος είναι να ελέγξετε μόνοι σας την κρυφή μνήμη αναπαραγωγής, η οποία θα έχει ένα επιπλέον αντίγραφο μνήμης


Αυτό που κάνει αυτή η μέθοδος είναι να σας επιτρέπει να τροποποιήσετε την τιμή του νέου byte[1024], δίνοντάς σας τον έλεγχο της αντιγραμμένης κρυφής μνήμης

Ακολουθούν ορισμένες μέθοδοι που δεν συνιστώνται, αλλά είναι βολικές όταν γράφετε


Η παραπάνω μέθοδος θα αντιγράψει τη μνήμη δύο φορές και εάν το μήκος του πόρου εισόδου είναι 1G, θα καταλάβει πόρους 2G

Παρόμοια με τα παραπάνω είναι να ζητήσετε μια μεγάλη κρυφή μνήμη, όπως φαίνεται στον παρακάτω κώδικα


Όσον αφορά την αποτελεσματικότητα και την κομψότητα του κώδικα, είναι στην πραγματικότητα κατώτερα από τη μέθοδο CopyTo και λόγω ροής. Το μήκος ως μήκος δεν καθορίζει την κρυφή μνήμη, επομένως δεν είναι τόσο καλή όσο η δεύτερη μέθοδος

Παρακάτω είναι μια εξαιρετικά αργή μέθοδος, η εγγραφή ενός byte προς ένα byte είναι εξαιρετικά αργή


Μεταφέρθηκε από:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
(Τέλος)




Προηγούμενος:Λειτουργία NPOI Excel Λεπτομερής Επεξήγηση
Επόμενος:X-Forwarded-Για πολλαπλές διευθύνσεις IP στην κεφαλίδα αιτήματος HTTP
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com