【问题标题】:Out of Memory failure automating VSTO Powerpoint API内存不足故障自动化 VSTO Powerpoint API
【发布时间】:2013-05-05 23:55:57
【问题描述】:

我正在使用 VSTO Powerpoint API 来自动创建 Powerpoint 文件。我发现在 Windows 7 系统上使用最基本的调用从 Web 应用程序创建 Powerpoint 文件会导致内存不足错误(其他操作打开文件的 VSTO 调用也会失败):

PowerPoint.Presentation presentation = _ppPresentations.Add(Office.MsoTriState.msoTrue);
        string outputDirectory= getOutputDirectory();
        presentation.SaveAs(outputDirectory+ "\\CreateSlideTestOutput.pptx",
                            PowerPoint.PpSaveAsFileType.ppSaveAsDefault, Office.MsoTriState.msoTrue);

在进行任何 VSTO API 调用以操作文件(例如,保存幻灯片或将幻灯片添加到 powerpoint)时,我收到的错误是“内存不足”。

但是,我发现如果我在单元测试中运行相同的代码,或者作为用户可执行文件 (.exe),添加内容、操作和保存 Powerpoint 文件都没有问题。

但是,当我尝试创建 Windows 服务以自动执行用户可执行文件中使用的相同代码时,我再次收到内存不足错误。我可以在我的服务中设置一个断点,并查看它在从我的 Web 应用程序调用时失败的完全相同的 VSTO API 调用上失败。

有没有人解释为什么用户可执行线程可以执行 VSTO API 调用而没有任何问题(并且在内存中没有可观察到的跳转),而我的应用程序池线程或 Windows 服务线程总是遇到内存不足错误?

【问题讨论】:

  • 如果你在你的用户账户下运行windows服务呢?
  • @BrijeshMishra 无论是我的用户帐户还是其他任何帐户,我都遇到了同样的问题
  • msdn.microsoft.com/en-us/library/aa679807%28office.11%29.aspx 使用这些 API 时需要进行一些清理工作,这可能有助于解决错误 - 你在尝试吗?
  • @StevenM 我最初尝试过,但问题是 OOM 异常发生在第一个修改文件的 COM 请求中。

标签: c# automation vsto powerpoint


【解决方案1】:

http://support.microsoft.com/kb/257757

在没有用户上下文的情况下自动化 Office 文档(使用 Interop .dll)不是 MS 支持的“稳定性”。他们建议使用其他解决方案,例如 OpenXML SDK:

http://www.microsoft.com/en-us/download/details.aspx?id=5124

【讨论】:

  • 有趣,服务器端绝对不支持 VSTO API。阅读该 KB 后,我仍然不确定为什么会出现内存不足问题。 openXMl SDK 看起来是唯一真正的选择。
  • 但是当我们必须使用 Windows 服务的 SaveAs() 将 ppt 转换为 pdf 时,我们该怎么办?因为 OpenXML-SDK 不提供这样的 api..
猜你喜欢
  • 2011-02-28
  • 2012-11-26
  • 2021-12-07
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2010-09-26
相关资源
最近更新 更多