【问题标题】:Should I set com objects to null before leaving a method我应该在离开方法之前将 com 对象设置为 null
【发布时间】:2015-12-10 23:25:43
【问题描述】:

我有一个在 c# 中引用的 vb6 对象,即 Process,它有一个操作集合。

我有方法

public double GetWidth(Process process, String operationName)
{
   Operation operation=process.GetOperation(operationName);
   return operation.GetValue("Width");
}

我需要在退出函数之前将操作设置为空吗?我不想处理进程或它包含的对象,但我不确定操作实例是否会导致我最终需要处理进程。

附带说明,如果需要,如何处理 com 对象?

【问题讨论】:

  • 没意义,jitter优化器会再去掉。 Read this.

标签: c# com-interop


【解决方案1】:

在退出函数之前是否需要将操作设置为null?

不,你没有。当方法存在时,operation 变量将超出范围,即使您不将其设置为 null。

从托管语言中使用的 COM 对象在被垃圾收集器最终确定后会自动处置。这意味着当没有人再持有对 COM 对象的引用时,该对象将在一段时间后被释放(取决于垃圾收集器何时决定启动并最终确定该对象)。

但是,如果您想立即释放 COM 对象,您可以调用Marshal.ReleaseComObject。您可能需要阅读此方法以了解何时应该使用它。

您想要使用Marshal.ReleaseComObject 的唯一原因是该对象拥有非常稀缺的资源,您不能等待垃圾收集器为您释放它。

【讨论】:

    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2015-03-05
    相关资源
    最近更新 更多