Ich habe einen Webserver, der große Binärdateien (mehrere Megabyte) in Byte-Arrays liest. Der Server könnte mehrere Dateien gleichzeitig lesen (verschiedene Seitenanfragen), so dass ich auf der Suche nach dem optimierten Weg, dies zu tun, ohne die CPU zu sehr zu belasten. Ist der folgende Code gut genug?
public byte[] FileToByteArray(string fileName)
{
byte[] buff = null;
FileStream fs = new FileStream(fileName,
FileMode.Open,
FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(fileName).Length;
buff = br.ReadBytes((int) numBytes);
return buff;
}
78 Stimmen
Ihr Beispiel kann wie folgt abgekürzt werden
byte[] buff = File.ReadAllBytes(fileName)
.3 Stimmen
Warum bedeutet die Tatsache, dass es sich um einen Webservice eines Drittanbieters handelt, dass die Datei vollständig im RAM sein muss, bevor sie an den Webservice gesendet wird, und nicht gestreamt? Der Webservice wird den Unterschied nicht erkennen.
0 Stimmen
@Brian, Einige Clients wissen nicht, wie sie mit einem .NET-Stream umgehen sollen, wie zum Beispiel Java. Wenn dies der Fall ist, kann nur die gesamte Datei in einem Byte-Array gelesen werden.
4 Stimmen
@sjeffrey: Ich sagte, dass die Daten gestreamt und nicht als .NET-Stream übergeben werden sollten. Die Clients werden den Unterschied so oder so nicht bemerken.