7 ответов:
что будет
File.WriteAllBytes().
и 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