【发布时间】:2020-11-27 21:12:03
【问题描述】:
我们在 C# 中创建了控制台应用程序,它将读取多页 tif/tiff 文件,分页然后转换为 base64 编码以将文件上传到其他目标应用程序(因为它只接受 base64 编码来上传文件)并且每当文件大小超过 500 MB 时,我们都会收到此内存不足异常。引发“System.OutOfMemoryException”类型的异常
Exception at System.Convert.ToBase64String(Byte[] inArray, Int32 offset, Int32 length, Base64FormattingOptions options)
at System.Convert.ToBase64String(Byte[] inArray)
代码片段:
Byte[] bytes = File.ReadAllBytes(filepath);
String base64stringofdocument = Convert.ToBase64String(bytes);
上面的文件路径是指>文件的绝对路径
【问题讨论】:
-
您可能需要做一些memory usage analysis with Visual Studio 才能找到问题的根本原因。
-
.NET 中单个字符串对象的长度不能超过 2^31-1 个字符。 Base64 编码占用相对于输入大小至少 4/3 的空间。这为您提供了大约 805MB 的理论文件大小上限,尽管实际上它可能更低。您可能希望在转换为 base64 之前压缩输入
-
您是否考虑过将数据流式传输而不是将整个文件读入内存?
-
Project > Properties > Build 选项卡,取消勾选“Prefer 32-bit”复选框。你不喜欢它。
-
@Charleh 只需参考上面的代码 sn-p,在传递到 base64 编码之前从文件转换为字节数组。如何改善这一点?请帮助我们
标签: c# out-of-memory tobase64string large-file-upload