相关疑难解决方法(0)

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

我有一个程序打开一个Excel COM对象,做一些东西,并关闭它.然后我想在文件关闭后移动它.如果我运行没有断点的程序,这可以正常工作.但是,如果我在尝试移动文件之前进入调试模式,我会得到一个IOException:"进程无法访问该文件,因为它正被另一个进程使用."

那是什么交易?当一个程序被允许以全速运行而不是在我踩过它时,垃圾收集是否表现更好?踩着我的代码做的不仅仅是非常缓慢地运行它吗?调试模式还有其他后果吗?遇到的其他错误只是因为我在调试而没有运行exe?

c# garbage-collection

8
推荐指数
1
解决办法
2765
查看次数

为什么垃圾收集器不收集任务对象

特别是当没有实时线程引用它时。

我认为 GC 会考虑所有 .net 线程来查找引用...它是否也检查其他地方的引用?

编辑:例如,假设我们在控制台应用程序中,主调用创建本地 task1 的方法,然后应用 task1.ContinueWith(task2) 并返回主,主执行 console.readline()。

此时可能是 task1 已完成,task2 仍未启动,GC 可以启动,并且没有线程引用 task2。为什么 task2 没有被 GC 处理?

EDIT2:可能我在说“任务”时没有使用正确的词

using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    class Program
    {
        static void Launch()
        {
            var task1 = Task.Run(() => Thread.Sleep(60000))
            task1.ContinueWith(() =>  WriteToFile("Hi"));
        }

        static void Main(string[] args)
        {
            Launch();
            //At this point if a GC occurs which thread or static file has a reference to "()=>WriteTofile("Hi")" ?
            Console.ReadLine();
        }
Run Code Online (Sandbox Code Playgroud)

有一个主线程在等待控制台,一个线程(可能来自线程池)运行 Sleep。就在 Sleep …

.net garbage-collection task-parallel-library

2
推荐指数
1
解决办法
965
查看次数