gpt4 book ai didi

C# VSTO Outlook 加载项 : What is a possible impact of not releasing the MailItem object

转载 作者:行者123 更新时间:2023-12-05 02:10:16 25 4
gpt4 key购买 nike

在 Outlook 中与 MailItems 交互时使用 Marshal.ReleaseComObject 的重要性是什么?

我引用了创建 C# VSTO Outlook 插件的演练,网址为 https://learn.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in-for-outlook?view=vs-2019

他们有一个修改现有选定邮件项目的主题和正文的示例。

void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
mailItem.Subject = "This text was added by using code";
mailItem.Body = "This text was added by using code";
}

}
}

示例结束时没有提及使用 Marshal.ReleaseComObject 释放邮件项对象。

但在 https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.releasecomobject?view=netframework-4.8 的 .Net API 引用中,他们提到:

You should use this method to free the underlying COM object that holds references to resources in a timely manner or when objects must be freed in a specific order.

那么,如果我们未能在我们引用的 MailItem 上使用 Marshal.ReleaseComObject,显然会有一些后果?

是否存在不使用 Marshal.ReleaseComObject 会导致问题的特定用例?

谢谢

最佳答案

如果您不调用 Marshal.ReleaseComObject,该对象将作为垃圾收集器稍后破坏的点被释放。通常,这不是问题 - 在处理大量项目时,您通常需要小心,不要随意放行。在这种特殊情况下,没有 Marshal.ReleaseComObject 就没问题,除非您想确保项目已发布以防它在外部更新并且您不希望 Outlook 对象模型结束有一个陈旧的对象。

请注意,mailItem 变量上的 Marshal.ReleaseComObject 是不够的 - 您需要注意隐式变量,例如当您使用多点表示法时。一些 .Net 运算符也以隐式变量结束,as 就是其中之一(以及 is):

void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
{
object item = Inspector.CurrentItem;
Outlook.MailItem mailItem = item as Outlook.MailItem;
if (mailItem != null)
{
if (mailItem.EntryID == null)
{
mailItem.Subject = "This text was added by using code";
mailItem.Body = "This text was added by using code";
}
Marshal.ReleaseComObject(mailItem);
}
Marshal.ReleaseComObject(item);
}

关于C# VSTO Outlook 加载项 : What is a possible impact of not releasing the MailItem object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com