GC.TryStartNoGCRegion 方法

定义

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

重载

名称 说明
TryStartNoGCRegion(Int64, Int64, Boolean)

如果指定的内存量可用于大型对象堆和小型对象堆,则尝试在执行关键路径期间禁止垃圾回收,并控制垃圾回收器在最初没有足够的内存时是否执行完全阻止垃圾回收。

TryStartNoGCRegion(Int64, Int64)

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

TryStartNoGCRegion(Int64, Boolean)

如果指定的内存量可用,则尝试在执行关键路径期间禁止垃圾回收,并控制垃圾回收器是否在最初没有足够的内存可用时执行完全阻止垃圾回收。

TryStartNoGCRegion(Int64)

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

注解

Important

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

TryStartNoGCRegion(Int64, Int64, Boolean)

Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs

如果指定的内存量可用于大型对象堆和小型对象堆,则尝试在执行关键路径期间禁止垃圾回收,并控制垃圾回收器在最初没有足够的内存时是否执行完全阻止垃圾回收。

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

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

disallowFullBlockingGC
Boolean

true 如果垃圾回收器最初无法在小型对象堆(SOH)和 LOH 上分配指定的内存,则省略完全阻止垃圾回收;否则,为 false.

返回

true 如果运行时能够提交所需的内存量,并且垃圾回收器无法进入 GC 区域延迟模式,否则,为 false.

属性

例外

totalSize - lohSize 超出临时段大小。

该过程已处于无 GC 区域延迟模式。

注解

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

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

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

Important

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

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

另请参阅

适用于

TryStartNoGCRegion(Int64, Int64)

Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs

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

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

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

返回

true 如果运行时能够提交所需的内存量,并且垃圾回收器无法进入 GC 区域延迟模式,否则,为 false.

属性

例外

totalSize - lohSize 超出临时段大小。

该过程已处于无 GC 区域延迟模式。

注解

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

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

Important

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

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

另请参阅

适用于

TryStartNoGCRegion(Int64, Boolean)

Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs

如果指定的内存量可用,则尝试在执行关键路径期间禁止垃圾回收,并控制垃圾回收器是否在最初没有足够的内存可用时执行完全阻止垃圾回收。

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

返回

true 如果运行时能够提交所需的内存量,并且垃圾回收器无法进入 GC 区域延迟模式,否则,为 false.

属性

例外

totalSize 超出临时段大小。

该过程已处于无 GC 区域延迟模式。

注解

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

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

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

Important

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

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

另请参阅

适用于

TryStartNoGCRegion(Int64)

Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs
Source:
GC.CoreCLR.cs

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

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

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

返回

true 如果运行时能够提交所需的内存量,并且垃圾回收器无法进入 GC 区域延迟模式,否则,为 false.

属性

例外

totalSize 超出临时段大小。

该过程已处于无 GC 区域延迟模式。

注解

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

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

Important

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

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

另请参阅

适用于