【问题标题】:Properly closing an office interop excel application [duplicate]正确关闭办公室互操作excel应用程序[重复]
【发布时间】:2016-12-28 06:47:33
【问题描述】:

我正在开发一个 VB 表单应用程序,该应用程序使用 office interop 库访问 excel 工作表内容。使用 Office 2016 在 Windows 8 上进行开发。

举个简单的例子:

Import excel = Microsoft.Office.Interop.Excel 

Private Sub Form_Load(sender As Object, e as EventArgs) Handles MyBase.Load
    Dim excelApp as excel.Application = New excel.Application
    excelApp.Quit
End Sub

这似乎会导致泄漏。当表单仍然打开时,从命令提示符调用任务列表将显示一个正在运行的 excel 应用程序(在我的机器上消耗 15m 内存)。只有当用户关闭基本 VB 应用程序时,excel 进程才会终止。

对于我的应用程序,在关闭 excel 进程之前依赖父进程关闭是不可接受的。我怎样才能杀死这些 excel 进程?

【问题讨论】:

  • 请在发布副本之前搜索这些有答案的内容...
  • 抱歉,在我的搜索中没有找到。

标签: vb.net excel


【解决方案1】:

您可以为此使用 Marshal 类 (MSDN)。我发现以相反的顺序运行所有 excel 对象是最好的 -> 工作表、工作簿、应用程序。

  Marshal.FinalReleaseComObject(comObj)

【讨论】:

  • 您能否解释一下为什么需要编组以及为什么需要相反的顺序?这将帮助 OP 理解他的问题...
  • 当我使用 excel 作为 com 对象时,我发现发布那里的过程很困难。经过大量实验和论坛中其他人的一些指导 - 这被发现并告诉我这是这些对象的最佳实践。相反的顺序很有帮助-我不记得确切的原因-发生了很多时间和啤酒。 MS专门为此构建了这个功能。
  • 查看 Sidharth here 的这篇文章,它解释了这一点。使用 COM 对象时非常好...第一段解释了原因...
  • @Zaggler,感谢这篇文章。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多