我的Outlook插件(VB.net)遍历邮件项目并计算其大小,如下所示:
For Each m in fol.Items
b = b + m.Size
Next
这很有效,除非Exchange文件夹中包含超过250个项目,在这种情况下我得到异常Your server administrator has limited the number of items you can open simultaneously.
我从中理解我的代码不会释放每个邮件项目,因为它迭代,所以我最终得到了数以百计的“开放式”。 Outlook中的文件。
我尝试在循环中添加m.Close()
行,但我see表示这不是预期的行为。
如何在处理对象时释放对象?
答案 0 :(得分:1)
首先,Marshal.ReleaseComObject是一个好主意。其次,"对于每个" .Net中的循环往往会保留所有集合项,直到循环退出 - 使用" for"而是循环。
最重要的是,绝对没有理由打开文件夹中的所有项目 - 使用Table对象(MAPIFolder.GetTable)。见http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.table(v=office.14).aspx
答案 1 :(得分:0)
我将代码更改为
For Each m in fol.Items
b = b + m.Size
Marshal.ReleaseComObject(m)
Next
这似乎效率低下,但它确实有效。