随机错误内存流不可扩展

问题描述

我正在使用以下代码更新 word 文档内容,该代码随机抛出错误内存流不可扩展:

MemoryStream TemplateFileMS = new MemoryStream(fileBytes);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(TemplateFileMS,true))
//...
// some code
//...
wordDoc.MainDocumentPart.Document.Save(); // Exception here

改成下面的代码后,错误没有发生。

MemoryStream TemplateFileMS = new MemoryStream(0);
TemplateFileMS.Write(fileBytes,fileBytes.Length);

所以我能够解决这个问题。但是我在 Azure 应用服务的开发环境中没有看到上述错误,但在生产 Azure 应用服务中,我随机收到内存不可扩展错误

是否与在这里产生差异的字节数/更新数有关?例如在测试时,我只进行了很少的更新,但在某些情况下,有更多的更新需要比设置容量更多的内存。

我尝试向文档添加更多更新,但无法使用以前的代码重现此错误

谢谢!

解决方法

通常,您只需从 byte[] 初始化 MemoryStream 以从现有缓冲区读取值。但是您正在写入流。这意味着您要么需要让 MemoryStream 自己管理缓冲区(不给它一个),要么您给它的缓冲区需要足够大。在大多数情况下,第一个选项更简单。它抱怨是因为您给它的缓冲区太小,但它无法调整大小,因为您在外部定义了缓冲区(而不是让 MemoryStream 控制)。 >