He visto algunas entradas de blog en línea sobre cómo guardar Stream en un archivo,Muchos son incorrectos。 (Encontré varios problemas: bajo rendimiento, anormal cuando el flujo es demasiado grande)
Después de recibir una retransmisión, cómo guardar elegantemente esta transmisión en código
El método más elegante debería ser mediante CopyTo o CopyToAsync
aquí inputStream.Seek(0, SeekOrigin.Begin); No necesariamente, por favor usa este código según tus necesidades, como que solo necesitas copiar el flujo desde el décimo byte, etc
Usar el enfoque asincrónico llevará un poco más de tiempo en esta escritura, pero mejorará el rendimiento general y permitirá que la CPU gestione otras tareas
Ten en cuenta que al usar CopyToAsync, recuerda añadir await; al ejecutar este código, pasarás la ejecución a IO; la mayoría del procesamiento de IO no requiere CPU para calcular, para que el rendimiento general sea mejor
Además, si el iputStream viene de fuera, entonces no recomiendo liberarlo dentro de este método, ¿por qué? Usé un buen arroyo y se deshizo cuando pasé por delante en un negocio
El segundo método es controlar tú mismo la caché de replicación de memoria, que tendrá una copia de memoria adicional
Lo que hace este método es permitir modificar el valor de un nuevo byte[1024], dándote control sobre la caché copiada
A continuación, algunos métodos que no se recomiendan, pero que son cómodos al escribir
El método anterior copiará la memoria dos veces, y si la longitud del recurso de entrada es 1G, ocupará 2G de recursos
Similar a lo anterior es solicitar una caché grande, como se muestra en el siguiente código
En términos de eficiencia y elegancia del código, en realidad son inferiores al método CopyTo, y por el flujo de datos. La longitud como longitud no determina la caché, por lo que no es tan buena como el segundo método
A continuación hay un método muy lento, escribir byte a byte es muy lento
Transferido desde:El inicio de sesión del hipervínculo es visible. (Fin)
|