【发布时间】: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 中吗?
标签: c# binary tags powerpoint add-in