我开发的Microsoft PowerPoint自定义插件。我的插件需要将大量的二进制数据存储到PowerPoint演示文稿中。我将这个二进制数据作为base 64编码字符串存储到PowerPoint演示文稿标记中。我发现,当演示文稿包含大量数据(如10+兆字节)时,PowerPoint在保存演示文稿时似乎漏出内存。所以当这样的演示文稿被多次保存时,PowerPoint甚至会耗尽系统内存并崩溃。PowerPoint 2010内存泄漏?
我制定了一个非常简单的C#插件来隔离问题。它存储二进制数据的50兆字节到演示文稿中创建新的演示文稿时:
private void Application_AfterNewPresentation(PowerPoint.Presentation presentation)
{
int tagLength = 5 * 1000 * 1000;
StringBuilder largeTagValue = new StringBuilder();
largeTagValue.Capacity = tagLength + 2;
for (int i = 0; i < tagLength; i++)
{
largeTagValue.Append("A");
}
largeTagValue.Append("\0");
string largeTagValueString = largeTagValue.ToString();
for (int i = 0; i < 10; i++)
{
presentation.Tags.Add("LARGE_TAG" + i.ToString(), largeTagValueString);
}
}
运行该插件后,我甚至可以禁用它,以确保它不会做任何事情更多。接下来,我多次保存演示文稿,并且每次保存演示文稿时都会看到进程列表中的PowerPoint内存使用量会增加。
完整的源代码和样本演示可here
有谁知道这是否是一个PowerPoint bug或者是对此有任何解决方法吗?...
或者,也许有另一种方式来将相对大量的数据存储到PowerPoint演示文稿中?
我认为这是一个错误;它肯定不是*设计的*来泄漏内存,崩溃和烧伤。我没有信息方便,但我确信我看到了,什么地方,你如何能有一个PowerPoint文件中的任意文件,假设你使用的XML格式(PPTX,PPTM的解释, PPSX等)。 – 2013-03-23 16:57:19
Steve,你有什么想法如何在不使用PowerPoint标签的情况下在PPTX中存储二进制文件? – 2013-03-27 08:23:27