GC.TryStartNoGCRegion 方法

定义

在关键路径执行期间尝试禁止垃圾回收。

重载

TryStartNoGCRegion(Int64, Int64, Boolean)

如果指定数量的内存可用大对象堆和小对象堆,则在关键路径执行期间尝试禁止垃圾回收;并在初始没有足够内存可用的情况下,控制垃圾回收器是否进行完整的阻碍性垃圾回收。

TryStartNoGCRegion(Int64, Int64)

如果指定数量的内存可用于大对象堆和小对象堆,则在关键路径执行期间尝试禁止垃圾回收。

TryStartNoGCRegion(Int64, Boolean)

如果指定数量的内存可用,则在关键路径执行期间尝试禁止垃圾回收;并在初始没有足够内存可用的情况下,控制垃圾回收器是否进行完整的阻碍性垃圾回收。

TryStartNoGCRegion(Int64)

如果指定数量的内存可用,则在关键路径执行期间尝试禁止垃圾回收。

注解

重要

不能嵌套对方法的 TryStartNoGCRegion 调用,并且仅当运行时当前没有 GC 区域延迟模式时,才应调用 EndNoGCRegion 该方法。 换句话说,在首次方法调用后,不应 TryStartNoGCRegion 多次调用 (,后续调用不会成功) ,并且不应期望 EndNoGCRegion 调用成功,只是因为第一次调用 TryStartNoGCRegion 成功。

TryStartNoGCRegion(Int64, Int64, Boolean)

如果指定数量的内存可用大对象堆和小对象堆,则在关键路径执行期间尝试禁止垃圾回收;并在初始没有足够内存可用的情况下,控制垃圾回收器是否进行完整的阻碍性垃圾回收。

public:
 static bool TryStartNoGCRegion(long totalSize, long lohSize, bool disallowFullBlockingGC);
public static bool TryStartNoGCRegion (long totalSize, long lohSize, bool disallowFullBlockingGC);
[System.Security.SecurityCritical]
public static bool TryStartNoGCRegion (long totalSize, long lohSize, bool disallowFullBlockingGC);
static member TryStartNoGCRegion : int64 * int64 * bool -> bool
[<System.Security.SecurityCritical>]
static member TryStartNoGCRegion : int64 * int64 * bool -> bool
Public Shared Function TryStartNoGCRegion (totalSize As Long, lohSize As Long, disallowFullBlockingGC As Boolean) As Boolean

参数

totalSize
Int64

在不会触发垃圾回收的情况下分配的内存量(以字节为单位)。 totalSize -lohSize 必须小于或等于临时段的大小。 有关暂时段大小的信息,请参阅垃圾回收基础知识一文中“暂时代和暂时段”一节。

lohSize
Int64

totalSize 中用于大对象堆 (LOH) 分配的字节数。

disallowFullBlockingGC
Boolean

true 表示如果垃圾回收器初始无法分配小对象堆 (SOH) 和 LOH 上的指定内存,则忽略完整的阻碍性垃圾回收;否则为 false

返回

Boolean

如果运行时能够调配所需数量的内存,且垃圾回收器能够进入无 GC 区域延迟模式,则为 true;否则为 false

属性

例外

totalSize - lohSize 超出了暂时段大小。

进程已进入无 GC 区域延迟模式。

注解

该方法 TryStartNoGCRegion(Int64, Int64, Boolean) 尝试将垃圾回收器置于无 GC 区域延迟模式下,这不允许在应用执行关键代码区域时进行垃圾回收。 如果运行时无法最初分配请求的内存量,并且 disallowFullBlockingGC 参数为 false,则垃圾回收器在尝试释放其他内存时执行完全阻止垃圾回收;否则,分配会失败,并且该方法返回 false。 如果垃圾回收器能够为 LOH 和totalSize - lohSize小型对象堆分配lohSize (SOH) ,则不会进入 GC 区域延迟模式。

lohSize 必须足够大才能处理 LOH 关键路径中发生的所有内存分配,并且 totalSize - lohSize 必须足够大,才能处理 SOH 关键路径中发生的所有内存分配。 这包括应用的分配,以及运行时代表应用进行的分配。

如果最初没有足够的内存可用,则为true防止完全阻止垃圾回收的设置disallowFullBlockingGC在负载均衡方案中最有用:一个系统可以调用此方法,并报告自己已准备好接受请求(如果返回true),并且负载均衡器在返回false时将请求重定向到其他系统。 然后,当它未通过调用 Collect(Int32, GCCollectionMode, Boolean, Boolean) 该方法处理请求时,它可以执行完全阻止垃圾回收。

重要

不能嵌套对方法的 TryStartNoGCRegion 调用,并且仅当运行时当前没有 GC 区域延迟模式时,才应调用 EndNoGCRegion 该方法。 换句话说,在首次方法调用后,不应 TryStartNoGCRegion 多次调用 (,后续调用不会成功) ,并且不应期望 EndNoGCRegion 调用成功,只是因为第一次调用 TryStartNoGCRegion 成功。

通过调用 EndNoGCRegion 该方法退出无 GC 区域延迟模式。

另请参阅

适用于

TryStartNoGCRegion(Int64, Int64)

如果指定数量的内存可用于大对象堆和小对象堆,则在关键路径执行期间尝试禁止垃圾回收。

public:
 static bool TryStartNoGCRegion(long totalSize, long lohSize);
public static bool TryStartNoGCRegion (long totalSize, long lohSize);
[System.Security.SecurityCritical]
public static bool TryStartNoGCRegion (long totalSize, long lohSize);
static member TryStartNoGCRegion : int64 * int64 -> bool
[<System.Security.SecurityCritical>]
static member TryStartNoGCRegion : int64 * int64 -> bool
Public Shared Function TryStartNoGCRegion (totalSize As Long, lohSize As Long) As Boolean

参数

totalSize
Int64

在不会触发垃圾回收的情况下分配的内存量(以字节为单位)。 totalSize -lohSize 必须小于或等于临时段的大小。 有关暂时段大小的信息,请参阅垃圾回收基础知识一文中“暂时代和暂时段”一节。

lohSize
Int64

totalSize 中用于大对象堆 (LOH) 分配的字节数。

返回

Boolean

如果运行时能够调配所需数量的内存,且垃圾回收器能够进入无 GC 区域延迟模式,则为 true;否则为 false

属性

例外

totalSize - lohSize 超出了暂时段大小。

进程已进入无 GC 区域延迟模式。

注解

该方法 TryStartNoGCRegion(Int64, Int64) 尝试将垃圾回收器置于无 GC 区域延迟模式下,这不允许在应用执行关键代码区域时进行垃圾回收。 如果运行时最初无法分配请求的内存量,则垃圾回收器会执行完全阻止垃圾回收,试图释放额外的内存。 如果垃圾回收器能够为 LOH 和totalSize - lohSize小型对象堆分配lohSize (SOH) ,则不会进入 GC 区域延迟模式。

lohSize 必须足够大才能处理 LOH 关键路径中发生的所有内存分配,并且 totalSize - lohSize 必须足够大,才能处理 SOH 关键路径中发生的所有内存分配。 这包括应用的分配,以及运行时代表应用进行的分配。

重要

不能嵌套对方法的 TryStartNoGCRegion 调用,并且仅当运行时当前没有 GC 区域延迟模式时,才应调用 EndNoGCRegion 该方法。 换句话说,在首次方法调用后,不应 TryStartNoGCRegion 多次调用 (,后续调用不会成功) ,并且不应期望 EndNoGCRegion 调用成功,只是因为第一次调用 TryStartNoGCRegion 成功。

通过调用 EndNoGCRegion 该方法退出无 GC 区域延迟模式。

另请参阅

适用于

TryStartNoGCRegion(Int64, Boolean)

如果指定数量的内存可用,则在关键路径执行期间尝试禁止垃圾回收;并在初始没有足够内存可用的情况下,控制垃圾回收器是否进行完整的阻碍性垃圾回收。

public:
 static bool TryStartNoGCRegion(long totalSize, bool disallowFullBlockingGC);
public static bool TryStartNoGCRegion (long totalSize, bool disallowFullBlockingGC);
[System.Security.SecurityCritical]
public static bool TryStartNoGCRegion (long totalSize, bool disallowFullBlockingGC);
static member TryStartNoGCRegion : int64 * bool -> bool
[<System.Security.SecurityCritical>]
static member TryStartNoGCRegion : int64 * bool -> bool
Public Shared Function TryStartNoGCRegion (totalSize As Long, disallowFullBlockingGC As Boolean) As Boolean

参数

totalSize
Int64

在不会触发垃圾回收的情况下分配的内存量(以字节为单位)。 它必须小于或等于临时段的大小。 有关暂时段大小的信息,请参阅垃圾回收基础知识一文中“暂时代和暂时段”一节。

disallowFullBlockingGC
Boolean

true 表示如果垃圾回收器初始无法分配 totalSize 字节,则忽略完整的阻碍性垃圾回收;否则为 false

返回

Boolean

如果运行时能够调配所需数量的内存,且垃圾回收器能够进入无 GC 区域延迟模式,则为 true;否则为 false

属性

例外

totalSize 超出了暂时段大小。

进程已进入无 GC 区域延迟模式。

注解

该方法 TryStartNoGCRegion(Int64, Boolean) 尝试将垃圾回收器置于无 GC 区域延迟模式下,这不允许在应用执行关键代码区域时进行垃圾回收。 如果运行时无法最初分配请求的内存量,并且 disallowFullBlockingGC 参数为 false,则垃圾回收器在尝试释放其他内存时执行完全阻止垃圾回收;否则,分配会失败,并且该方法返回 false。 如果垃圾回收器能够分配所需的内存量,则垃圾回收器不会进入 GC 区域延迟模式,在这种情况下,实际上为 2 * totalSize (它尝试为小型对象堆和totalSize大型对象堆分配totalSize) 。

totalSize 必须足够大,才能处理关键路径中发生的所有内存分配。 这包括应用的分配,以及运行时代表应用进行的分配。

如果最初没有足够的内存可用,则为true防止完全阻止垃圾回收的设置disallowFullBlockingGC在负载均衡方案中最有用:一个系统可以调用此方法,并报告自己已准备好接受请求(如果返回true),并且负载均衡器在返回false时将请求重定向到其他系统。 然后,当它未通过调用 Collect(Int32, GCCollectionMode, Boolean, Boolean) 该方法处理请求时,它可以执行完全阻止垃圾回收。

重要

不能嵌套对方法的 TryStartNoGCRegion 调用,并且仅当运行时当前没有 GC 区域延迟模式时,才应调用 EndNoGCRegion 该方法。 换句话说,在首次方法调用后,不应 TryStartNoGCRegion 多次调用 (,后续调用不会成功) ,并且不应期望 EndNoGCRegion 调用成功,只是因为第一次调用 TryStartNoGCRegion 成功。

通过调用 EndNoGCRegion 该方法退出无 GC 区域延迟模式。

另请参阅

适用于

TryStartNoGCRegion(Int64)

如果指定数量的内存可用,则在关键路径执行期间尝试禁止垃圾回收。

public:
 static bool TryStartNoGCRegion(long totalSize);
public static bool TryStartNoGCRegion (long totalSize);
[System.Security.SecurityCritical]
public static bool TryStartNoGCRegion (long totalSize);
static member TryStartNoGCRegion : int64 -> bool
[<System.Security.SecurityCritical>]
static member TryStartNoGCRegion : int64 -> bool
Public Shared Function TryStartNoGCRegion (totalSize As Long) As Boolean

参数

totalSize
Int64

在不会触发垃圾回收的情况下分配的内存量(以字节为单位)。 它必须小于或等于临时段的大小。 有关暂时段大小的信息,请参阅垃圾回收基础知识一文中“暂时代和暂时段”一节。

返回

Boolean

如果运行时能够调配所需数量的内存,且垃圾回收器能够进入无 GC 区域延迟模式,则为 true;否则为 false

属性

例外

totalSize 超出了暂时段大小。

进程已进入无 GC 区域延迟模式。

注解

该方法 TryStartNoGCRegion(Int64) 尝试将垃圾回收器置于无 GC 区域延迟模式下,这不允许在应用执行关键代码区域时进行垃圾回收。 如果运行时最初无法分配请求的内存量,则垃圾回收器会执行完全阻止垃圾回收,试图释放额外的内存。 如果垃圾回收器能够分配所需的内存量,则垃圾回收器不会进入 GC 区域延迟模式,在这种情况下,实际上为 2 * totalSize 字节, (它尝试为小型对象堆分配字节,并为totalSize大型对象堆分配totalSize字节) 。

totalSize 必须足够大,才能处理关键路径中发生的所有内存分配。 这包括应用的分配,以及运行时代表应用进行的分配。

重要

不能嵌套对方法的 TryStartNoGCRegion 调用,并且仅当运行时当前没有 GC 区域延迟模式时,才应调用 EndNoGCRegion 该方法。 换句话说,在首次方法调用后,不应 TryStartNoGCRegion 多次调用 (,后续调用不会成功) ,并且不应期望 EndNoGCRegion 调用成功,只是因为第一次调用 TryStartNoGCRegion 成功。

通过调用 EndNoGCRegion 该方法退出无 GC 区域延迟模式。

另请参阅

适用于