Каков наиболее эффективный способ сохранения массива байтов в виде файла на диске в C#?



довольно простой сценарий. У меня есть веб-служба, которая получает массив байтов, который должен быть сохранен как определенный тип файла на диске. Какой самый эффективный способ сделать это в C#?

427   7  

7 ответов:

что будет File.WriteAllBytes().

System.IO.File.WriteAllBytes(path, data) должно быть хорошо.

и WriteAllBytes просто выполняет

using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
    stream.Write(bytes, 0, bytes.Length);
}

BinaryWriter имеет вводящее в заблуждение имя, оно предназначено для записи примитивов в виде байтовых представлений вместо записи двоичных данных. Все его Write (byte[]) метод выполняет Write () на потоке его использования, в этом случае FileStream.

Не уверен, что вы подразумеваете под "эффективным" в этом контексте, но я бы использовал System.IO.File. WriteAllBytes(string path, byte[] bytes) - конечно, эффективный с точки зрения LOC.

У меня была аналогичная проблема с сбросом массива байтов 300 МБ в файл на диске...
Я использовал StreamWriter, и мне потребовалось добрых 30 минут, чтобы сбросить файл.
Используя FilePut взял меня вокруг 3-4 минут, и когда я использовал BinaryWriter, файл был сброшен через 50-60 секунд.
Если вы используете BinaryWriter вы будете иметь лучшую производительность.

возможно, классы System.IO.BinaryWriter и BinaryReader помогут.

http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx

"записывает примитивные типы в двоичном виде в поток и поддерживает запись строк в определенной кодировке."

http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx

"считывает примитивные типы данных в виде двоичных значений в определенной кодировке."

на самом деле, наиболее эффективным способом было бы передавать данные и записывать их по мере их получения. WCF поддерживает потоковую передачу, поэтому это может быть то, что вы хотите изучить. Это особенно важно, если вы делаете это с большими файлами, так как вы почти наверняка не хотите, чтобы содержимое файла в памяти на сервере и клиенте.

Comments

    Ничего не найдено.