2013-03-23 49 views
1

我开发的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演示文稿中?

+0

我认为这是一个错误;它肯定不是*设计的*来泄漏内存,崩溃和烧伤。我没有信息方便,但我确信我看到了,什么地方,你如何能有一个PowerPoint文件中的任意文件,假设你使用的XML格式(PPTX,PPTM的解释, PPSX等)。 – 2013-03-23 16:57:19

+0

Steve,你有什么想法如何在不使用PowerPoint标签的情况下在PPTX中存储二进制文件? – 2013-03-27 08:23:27

回答

0

多一点搜索把这个了......看看托德主要的回答第一个拿到的什么需要一个总体思路:

Is it possible to add some data to a Word document?

+0

Steve,谢谢你的回复。我想,我可以尝试将二进制数据存储在PowerPoint演示文稿的自定义XML部分中。但是,这种方法仍然可能存在一些缺陷。 1.我仍然需要将我的二进制数据编码为64位,这会增加演示文件的文件大小。 2.如果我将一个巨大的XML文件放入演示文稿(如〜50兆字节),我不知道PowerPoint演示文稿加载器是否可以正常工作。我需要能够将多个文件存储到演示文稿中。所以我会尝试这种方法来看看它是否适用于我。再次感谢。 – 2013-03-28 09:37:20

+0

你可以做一些测试,以加载时间W/O必须写所有的代码;插入OLE对象(Excel对象,Word对象,Photoshop的对象,等等)到演示文稿,并保存它,然后破解打开PPTX(ZIP)文件,怎么看待OLE对象已存储以及它们如何影响加载时间等 – 2013-03-28 14:30:07

+0

谢谢史蒂夫。这是一个有趣的想法,我会试试这个。 – 2013-03-29 09:01:22