Cod*_*ats 15 c# garbage-collection
我正在对我的代码运行一些基准测试,我想确保在我的一个基准测试期间不会发生垃圾收集,因为它正在清理先前测试的混乱.我认为我最好的机会是在开始基准测试之前强制收集.
所以我在基准测试开始之前调用GC.Collect()但不确定收集是否继续在单独的线程中运行等,并立即返回.如果它确实在BG线程上运行,我想知道如何同步调用它或至少等待它完成收集.
Max*_*xim 13
正如MSDN所述 - 使用此方法尝试回收所有无法访问的内存.
无论如何,如果确实开始垃圾收集,你应该等到所有的终结者完成开始基准测试之前.
GC.Collect();
GC.WaitForPendingFinalizers();
Run Code Online (Sandbox Code Playgroud)
Sho*_*ked 11
从.NET Framework 4.5开始,您可以指定GC集合是否应该阻塞:
GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized, blocking: true);
Run Code Online (Sandbox Code Playgroud)
要么
GC.Collect(GC.MaxGeneration, GCCollectionMode.Default, blocking: true);
Run Code Online (Sandbox Code Playgroud)
GCCollectionMode.Default 目前默认为 GCCollectionMode.Forced
有关详细信息,请参阅:
MSDN:GC.Collect方法(Int32,GCCollectionMode,Boolean)