我已经使用C#创建了一个简单的Outlook 2007加载项,它通过选择消息循环并检查其附件。Outlook 2007加载项内存泄漏?
我在一组〜25,000选定的消息上运行此加载项。不过,我立即注意到Outlook的内存使用情况(通过perfmon看到)正在上升。在逐行调试模式下运行加载项后,显然在访问Message's Attachments集合的第一个实例时将内存分配给Outlook。这个内存是从来没有返回给系统; Outlook在大约1GB(大约12,000条消息)之后继续占用内存,于是我收到“内存不足或系统资源”错误。有任何想法吗?
下面是部分代码:
for(int i = 1; i <= objSelectedItems.Count; i++)
{
Object objMsg = objSelectedItems[i];
//Only process if Item is a Message
if (objMsg is Outlook.MailItem)
{
Outlook.MailItem Msg = objMsg as Outlook.MailItem;
//The culprit: this allocates memory to Outlook which I can't get back
Outlook.Attachments objAttachments = Msg.Attachments;
//Perform some actual work here//
//Clean up Outlook objects; does not appear to give memory back to system
Msg.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
Marshal.ReleaseComObject(objAttachments);
Marshal.ReleaseComObject(Msg);
}
Marshal.ReleaseComObject(objMsg);
GC.Collect();
GC.WaitForPendingFinalizers();
}
该修复程序是否解决了您的问题?也许你需要释放每一个附件(见我的更新)? – 2009-10-15 22:00:49