相关疑难解决方法(0)

在C#中强制垃圾收集的最佳实践

根据我的经验,似乎大多数人会告诉你强制垃圾收集是不明智的,但在某些情况下,你正在使用大型对象,这些对象并不总是在0代收集,但内存是一个问题,是它可以强制收集?这样做有最好的做法吗?

.net c# garbage-collection

116
推荐指数
11
解决办法
15万
查看次数

垃圾收集器是否受益于对Collect和WaitForPendingFinalizers()的多次调用?

我发现这个在线代码是在取消初始化Excel Interop对象后附加的:

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)

这是对DRY的准违反(以口吃的方式连续两次调用GC.Collect()和GC.WaitForPendingFinalizers())有什么用处,或者只是浪费时间?

c# garbage-collection office-interop collect

3
推荐指数
1
解决办法
431
查看次数

垃圾收集器,调用和callvirt以及调试/释放代码模式执行差异

我有一节课:

public class SomeClass {
    public int I;

    public SomeClass(int input) {
        I = input;
        Console.WriteLine("I = {0}", I);
    }

    ~SomeClass() {
        Console.WriteLine("deleted");
    }

    public void Foo() {
        Thread.Sleep(1000);
        Console.WriteLine("Foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

这个程序:

class Program {
    static void Main(string[] args) {
        new Thread(() => {
                       Thread.Sleep(100);
                       GC.Collect();
                   }) { IsBackground = true }.Start();

        new SomeClass(10).Foo();

        // The same as upper code
        // var t = new SomeClass(10);
        // t.Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在调试模式下运行此代码时,我有下一个结果:

I = 10
Foo
deleted
Run Code Online (Sandbox Code Playgroud)

但是,当我将模式更改为 …

.net c# garbage-collection memory-management

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