2016-09-16 3 views
1

Я новичок в C#, и мой босс хочет, чтобы я исследовал исключение OutOfMemory. Код, который бросает исключение ниже конкретно первая строка, если файл большой (> 50Мб):Большой файл и OutOfMemoryException

 byte[] fileBytes = ws.getFile(f.FileId, f.Version); // This line gets the file from a webservice. 
    File.WriteAllBytes(Path.Combine(folder, f.FileId.ToString("0")), fileBytes); 

Я где-то читал, что использование byte[] не является хорошей идеей для больших файлов. может помочь вам?

+0

В чем заключалась задача? Вам действительно нужно прочитать весь файл в памяти? – zerkms

+0

Вы наносите гвоздь на голову, не читайте все сразу в памяти. Это то, для чего используются потоки. Скопируйте 1 кусок за раз. Существует не так много другого, что кто-либо может предложить, если вы не разделяете код внутри метода 'ws.getFile' – Igor

+0

Привет, Zerkms. Задача состоит в том, чтобы читать файлы из CMS (case360, который предоставляет услугу getFile, чтобы другие приложения могли читать файлы из), затем конвертировать/объединять файлы в новый файл PDF и хранить их в CMS. Я согласен загрузить большие файлы в память, это не очень хорошая идея, так что вы можете расширить поток/кусок, пожалуйста? – Greg

ответ

2

В настоящее время ваш код загружает весь файл и вставляет его в кучу, а затем записывает в файл локально.

Чтобы избежать OutOfMemoryException, вы захотите записать на диск, как вы идете, а не ждать до конца. Вы можете добиться этого, получив файл из webservice как поток, открыв новый поток файлов для записи и копирования содержимого.

+0

Спасибо Scarl3tt, можете указать я к любому образцу кода, так как это спасло бы множество неприятностей для нового стартера C#? – Greg

+0

Легко для Google –

+0

@Greg. Как говорит Нидхин, есть много ресурсов, которые помогут вам получить файл с веб-ресурса в виде потока и сохранить поток в файл. Без подробностей о реализации вашего метода getFile здесь не так много смысла писать код образца. Если вы предоставите эту реализацию, я, вероятно, смогу немного помочь. – mirichan

Смежные вопросы