Przejrzałem kilka wpisów na blogu online o zapisywaniu Streama do pliku,Wiele z nich się myli。 (Zauważyłem kilka problemów: słaba wydajność, nieprawidłowości, gdy strumień jest zbyt duży)
Po zdobyciu strumienia, jak elegancko zapisać ten strumień w kodzie
Najbardziej elegancką metodą powinna być metoda CopyTo lub CopyToAsync
tutaj inputStream.Seek(0, SeekOrigin.Begin); Niekoniecznie, proszę używać tego kodu zgodnie ze swoimi potrzebami, np. wystarczy skopiować strumień z 10. bajtu itd
Użycie podejścia asynchronicznego zajmie trochę więcej czasu na ten zapis, ale zapewni to lepszą wydajność i pozwoli procesorowi obsłużyć inne zadania
Należy zauważyć, że podczas korzystania z CopyToAsync pamiętaj, aby dodać await; podczas wykonywania tego kodu przekazujesz wykonanie IO, większość procesów IO nie wymaga CPU do obliczeń, więc ogólna wydajność może być lepsza
Jeśli iputStream wchodzi z zewnątrz, to nie polecam wypuszczania go w tej metodzie, dlaczego? Korzystałem z dobrego strumienia i został zabity, gdy przechodziłem w firmie
Drugą metodą jest samodzielne sterowanie pamięcią podręczną replikacji, która będzie miała dodatkową kopię pamięci
Ta metoda pozwala na modyfikację wartości nowego bajtu[1024], dając kontrolę nad skopiowaną pamięcią podręczną
Kolejne metody to niezalecane, ale wygodne przy pisaniu
Powyższa metoda kopiuje pamięć dwukrotnie, a jeśli długość zasobu wejściowego wynosi 1G, zajmie ona 2G zasobów
Podobnie jak powyżej, można zażądać dużej pamięci podręcznej, jak pokazano w poniższym kodzie
Pod względem efektywności i elegancji kodu są one faktycznie gorsze od metody CopyTo i ze względu na przepływ. Długość jako długość nie determinuje pamięci podręcznej, więc nie jest tak dobra jak druga metoda
Poniżej znajduje się bardzo wolna metoda – zapis jeden bajt na bajt jest bardzo wolny
Przeniesiono z:Logowanie do linku jest widoczne. (Koniec)
|