Outlook Addin:避免打开商品限制

时间:2014-07-28 18:01:51

标签: vb.net outlook vsto outlook-addin

我的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表示这不是预期的行为。

如何在处理对象时释放对象?

2 个答案:

答案 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

这似乎效率低下,但它确实有效。