我使用C#创建了一个简单的Outlook 2007插件,该插件循环遍历一组消息并检查它们的附件。
我在约25,000封选定的邮件上运行此插件。然而,立即注意到Outlook的内存使用量(通过perfmon查看)飙升。在逐行运行调试模式下的插件时,很明显,在第一次访问消息的附件集合时,内存被分配给Outlook。这些内存从未返回到系统,Outlook继续消耗内存,直到达到约1GB(大约12,000封邮件后),然后我会收到“内存不足或系统资源不足”的错误。有什么想法吗?
以下是代码的一部分:
我在约25,000封选定的邮件上运行此插件。然而,立即注意到Outlook的内存使用量(通过perfmon查看)飙升。在逐行运行调试模式下的插件时,很明显,在第一次访问消息的附件集合时,内存被分配给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();
}