通过 CPP+COM 应用程序处理大型 PST 时获取 MAPI_E_NOT_ENOUGH_MEMORY、0x8007000E

问题描述

我们正在以编程方式处理大型 PST 文件,对电子邮件进行少量更改,然后将其存储回 PST。我们正在为 PST 中的每封邮件都这样做。但是在处理一定数量的电子邮件后(大约 13922-13924),我们开始收到 MAPI_E_NOT_ENOUGH_MEMORY(0x8007000E) 错误,之后我们无法打开 PST 对象/邮件。我们必须停止我们的 exe,然后重新运行它。然后它开始处理来自 PST 的下一个剩余邮件,并在处理下一批 13922 周围的邮件后再次开始给出相同的错误。 当我们开始出现错误时,我们进程的内存消耗最大为 130MB。有足够的 RAM(12gb) 和磁盘空间(30gb+) 可用。 我们是否缺少释放任何可能与 MAPI 相关的、不属于内存、句柄或线程利用率的内容? 还请帮助我们了解此类错误背后的原因和可能的解决方案。

提前致谢。

解决方法

这听起来确实像是在泄漏 MAPI 对象引用。很难更精确 - 尝试注释掉您的大部分代码并一次带回几行/方法,直到问题再次出现。