首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >垃圾收集是否在调试期间运行?

垃圾收集是否在调试期间运行?
EN

Stack Overflow用户
提问于 2011-08-24 01:50:46
回答 2查看 4K关注 0票数 9

我有一个程序可以打开Excel COM对象,执行一些操作,然后将其关闭。然后我想要在文件关闭后移动它。如果我在没有断点的情况下运行程序,这将工作得很好。但是,如果我在尝试移动文件之前进入调试模式,则会得到一个IOException:“该进程无法访问该文件,因为它正被另一个进程使用。”

那是怎么回事呢?当程序被允许全速运行时,垃圾收集的性能是否比我单步执行时更好?单步执行我的代码不仅仅是非常缓慢地运行它吗?调试模式还有其他后果吗?遇到的其他错误,只是因为我在调试中,没有运行可执行文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-24 01:53:11

特别是,CLR可以检测到某个变量不会用于方法的其余部分,并将其视为不再是GC根。在调试器中,作用域中的变量在整个方法中充当GC根,因此您仍然可以使用调试器检查这些值。

然而,这应该很少是问题-它应该只在终结器实际执行一些清理时才会影响事情,如果你显式地及时清理东西(例如使用using语句),你通常不会注意到区别。

票数 19
EN

Stack Overflow用户

发布于 2019-03-15 06:35:50

根据记录,我也遇到过几次这样的情况。我发现在调试模式下测试调用本机代码的终结器时,这是有效的:

代码语言:javascript
复制
((Action)()=>{
   // Do your stuff in here ...
})();

GC.Collect();
GC.WaitForPendingFinalizers();

垃圾收集器似乎将分配的副本保存在本地方法作用域中,因此通过创建新的方法作用域并退出,GC通常会释放资源。到目前为止,这对于我的调试目的来说工作得很好。

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

https://stackoverflow.com/questions/7165353

复制
相关文章

相似问题

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