相关疑难解决方法(0)

收集仍在范围内的对象 - GC.Collect

我读过这篇文章:http://blogs.msdn.com/b/oldnewthing/archive/2010/08/10/10048149.aspx,老实说,我不了解每一个细节.据我所知,在下面的代码中,即使我没有将c设置为null,也应该收集c.另一件事是,只要我们处于相同功能的范围内,在foreach期间发生的分配似乎不会被释放.(见下面的例子)

class Program
{
    public class SomeClass
    {
        public byte[] X;

        public SomeClass()
        {
            X = new byte[1024 * 1024 * 100];
            X[155] = 10;
        }
    }

    static void Main()
    {
        Console.WriteLine("Memory: " + GC.GetTotalMemory(false));

        SomeClass c;
        c = new SomeClass();

        Console.WriteLine("Memory: " + GC.GetTotalMemory(false));
        GC.Collect();
        Console.WriteLine("Memory: " + GC.GetTotalMemory(true));
        Console.ReadKey();

        /*
         * Output:
         * 
         * Memory: 186836
         * Memory: 105044468
         * Memory: 104963676
         * 
         */
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑第一个示例的解决方案:调试模式(不在调试器中运行,但甚至在编译模式下运行).如果我使用Release它将按预期工作:即使没有设置为null也会收集c.对于第二个例子,同样适用.

第二个例子

static void Main(string[] args)
{ …
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection

4
推荐指数
1
解决办法
942
查看次数

标签 统计

.net ×1

c# ×1

garbage-collection ×1