我见过很多建议运行GC.Collect(GC.MaxGeneration)的浏览器。
由于GC.Collect()方法将收集所有现有的世代,这两者之间有什么区别吗?
也许如果只有两个世代而不是三个世代,GC将收集两个世代,并且不会尝试收集第三个世代,这将提高性能。但说真的,这有意义吗?
发布于 2013-04-08 18:40:30
GC.Collect()和GC.Collect(GC.MaxGeneration)都使用GCCollectionMode.Default
所以,那就没有区别了!
根据MSDN
GCCollectionMode枚举
默认值:此枚举的默认设置,当前为强制设置。
Forced :强制立即进行垃圾回收。
优化:允许垃圾回收器确定当前时间是否是回收对象的最佳时间。
使用Reflector:
[MethodImpl(MethodImplOptions.InternalCall)]
private static void nativeCollectGeneration(int generation, int mode);
public static void Collect()
{
GC.nativeCollectGeneration(-1, 0);
}
public static void Collect(int generation)
{
GC.Collect(generation, GCCollectionMode.Default);
}P.S.:0和GCCollectionMode.Default相同。
发布于 2013-04-08 18:32:05
唯一的区别是GC.Collect()将使用GCCollectionMode.Optimized,而GC.Collect(GC.MaxGeneration)将使用GCCollectionMode.Default (至少在.NET Framework4.5中)。有一些重载,您也可以手动指定收集模式。
/// <summary>Specifies the behavior for a forced garbage collection.</summary>
public enum GCCollectionMode
{
/// <summary>The default setting for this enumeration, which is currently <see cref="F:System.GCCollectionMode.Forced" />. </summary>
Default,
/// <summary>Forces the garbage collection to occur immediately.</summary>
Forced,
/// <summary>Allows the garbage collector to determine whether the current time is optimal to reclaim objects. </summary>
Optimized
}发布于 2013-04-08 18:42:33
GC.Collect()可能什么也不做,因为它为GCCollectionMode使用了'Optimized‘
MSDN on Optimized->允许垃圾收集器确定当前时间是否是回收对象的最佳时间。
GC.Collect(GC.MaxGeneration)对GCCollectionMode使用'Forced‘
强制->上的MSDN强制立即进行垃圾回收。
两者都将尝试为所有几代人回收资源。
https://stackoverflow.com/questions/15876691
复制相似问题