PowerPoint 2010 内存泄漏?

Posted

技术标签:

【中文标题】PowerPoint 2010 内存泄漏?【英文标题】:PowerPoint 2010 memory leak? 【发布时间】:2013-03-13 05:00:35 【问题描述】:

我为 Microsoft PowerPoint 开发了一个自定义插件。我的插件需要将大量二进制数据存储到 PowerPoint 演示文稿中。我将此二进制数据作为 base 64 编码字符串存储到 PowerPoint 演示文稿标签中。我发现,当演示文稿在其标签中包含大量数据(如 10+ 兆字节)时,PowerPoint 在保存演示文稿时似乎正在泄漏内存。因此,当此类演示文稿被多次保存时,PowerPoint 甚至会耗尽系统内存并崩溃。

我开发了一个非常简单的 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 错误还是有任何解决方法?...

或者,也许还有另一种方法可以将相对大量的数据存储到 PowerPoint 演示文稿中?

【问题讨论】:

我认为这是一个错误;它肯定不是设计 来泄漏内存、崩溃和烧毁的。我手头没有这些信息,但我很确定我在某处看到了有关如何在 PowerPoint 文件中包含任意文件的说明,假设您使用的是一种 XML 格式(PPTX、PPTM、 PPSX 等)。 Steve,你知道如何在不使用 PowerPoint 标签的情况下将二进制文件存储在 PPTX 中吗? 【参考方案1】:

更多的搜索发现了这个......首先看看 Todd Main 的回答,以大致了解需要什么:

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

【讨论】:

史蒂夫,感谢您的帮助。我想,我可以尝试将二进制数据存储在 PowerPoint 演示文稿的自定义 XML 部分中。但是,这种方法仍然可能存在一些缺点。 1. 我仍然需要将我的二进制数据编码为 base 64,这会增加演示文件的大小。 2. 我想知道如果我在演示文稿中放入一个巨大的 XML 文件(如约 50 兆字节),PowerPoint 演示文稿加载器是否能正常工作。我需要能够将多个文件存储到演示文稿中。所以我会尝试这种方法,看看它是否适合我。再次感谢。 你可以做一些关于加载时间的测试,而无需编写所有代码;将 OLE 对象(Excel 对象、Word 对象、Photoshop 对象等)插入演示文稿并保存,然后打开 PPTX(ZIP) 文件并查看 OLE 对象的存储方式以及它们如何影响加载时间等/跨度> 谢谢史蒂夫。这是一个有趣的想法,我会试试这个。

以上是关于PowerPoint 2010 内存泄漏?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 CompileAssemblyFromSource 泄漏内存?

iPhone内存泄漏问题?

NSMutableDictionary 中的内存泄漏

C++:内存泄漏

为啥苹果提供的 SimpleFTPSample 会泄漏内存?

iPhone 内存泄漏与商店套件