C# 大文件和OutOfMemoryException

C# 大文件和OutOfMemoryException,c#,out-of-memory,large-files,C#,Out Of Memory,Large Files,我是C#新手,老板要我调查一个OutOfMemory异常。如果文件较大(>50MB),则引发异常的代码位于第一行下方: 我在某个地方读到,对于大文件来说,使用byte[]不是一个好主意。 能否提供一些帮助?目前,您的代码正在下载整个文件并将其粘贴到堆上,然后在本地写入文件 为了避免出现OutOfMemoryException,您需要边写边写,而不是等到结束。您可以通过以流的形式从Web服务获取文件,打开一个新的文件流来写入和复制内容来实现这一点。任务是什么?你真的需要把整个文件读入内存吗?你一针

我是C#新手,老板要我调查一个
OutOfMemory
异常。如果文件较大(>50MB),则引发异常的代码位于第一行下方:

我在某个地方读到,对于大文件来说,使用
byte[]
不是一个好主意。
能否提供一些帮助?

目前,您的代码正在下载整个文件并将其粘贴到堆上,然后在本地写入文件


为了避免出现
OutOfMemoryException
,您需要边写边写,而不是等到结束。您可以通过以流的形式从Web服务获取文件,打开一个新的文件流来写入和复制内容来实现这一点。

任务是什么?你真的需要把整个文件读入内存吗?你一针见血,不要一下子把所有的东西都读入内存。这就是流的用途。一次复制一个区块。除非你在方法
ws.getFile
Hi-Zerkms中共享代码,否则任何人都无法提供更多其他功能,任务是从CMS读取文件(case360公开getFile服务,允许其他应用程序读取文件),然后将文件转换/合并为新的PDF文件并存储到CMS中。我同意将大文件加载到内存中不是一个好主意,因此您可以在流/块上展开吗?您是否可以从web服务中使用其他方法来代替
getFile()
?可能是返回
流的流
?另外,返回一个50MB的文件作为一个字节数组肯定不是一个好主意,但它很难解释OOM,除非你多次调用它并将LOH作为一个结果进行分段,也许……谢谢Scarl3tt,你能给我指出任何示例代码,因为这将为新的C#starter节省很多麻烦吗?很容易理解Google@Greg-正如Nidhin所说,有很多资源可以帮助您从web资源中获取文件作为流,并将流保存到文件中。如果没有关于getFile方法实现的详细信息,在这里编写任何示例代码都没有多大意义。如果您提供该实现,我可能会提供更多帮助。
     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);