首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >垃圾回收器不以相同方法处理Excel实例

垃圾回收器不以相同方法处理Excel实例
EN

Stack Overflow用户
提问于 2020-03-19 17:47:40
回答 1查看 26关注 0票数 0

我有一个使用Excel-Interop的程序。现在,如果我调用Application.Quit-Method,它不会关闭Excel进程,必须首先运行垃圾收集器。但是由于某些原因,垃圾收集器只有在与使用Excel的方法不同的方法中调用时才能正常工作。

为什么会这样呢?

代码语言:javascript
复制
        public static void MethodA()
        {
            MethodB();
            //Calling the Garbage-Collector here DOES close the Excel-Process
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }

        public static void MethodB()
        {
            Application ExcelApp = new Application();

            ExcelApp.Quit();
            ExcelApp = null;

            //Calling the Garbage-Collector here DOES NOT close the Excel-Process
            //GC.Collect();
            //GC.WaitForPendingFinalizers();
        }
EN

回答 1

Stack Overflow用户

发布于 2020-03-19 23:46:10

垃圾收集器只回收未使用的内存。终结器可用于回收其他类型的资源。但是,终结器是不确定的,并且可能永远不会运行。因此,我认为设计良好的程序应该始终使用IDisposable接口来回收任何本机资源,并且只使用终结器作为后备。简而言之,您应该(理想情况下)永远不需要调用Gc.Collect或Gc.WaitForPendingFinalizer。

由于“应用程序”没有实现IDisposable,但显然有一个终结器,看起来对象设计得不是很好。

允许垃圾收集器在最后一次使用后的任何时间回收对象。但这可能取决于您是在debug还是在release中运行,以及是否附加了调试器。编译器有可能延长生命周期,使调试变得更容易。因此,据我所知,这两个示例应该是相同的,如果不是这样,可能是一些复杂的、未记录的行为,不应该依赖。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60754546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档