Colecciones inducidasInduced Collections

En la mayoría de los casos, el recolector de elementos no utilizados puede determinar cuál es el mejor momento para realizar una recolección y se debe permitir su ejecución de forma independiente.In most cases, the garbage collector can determine the best time to perform a collection, and you should let it run independently. Hay ocasiones excepcionales en que una recolección forzada puede mejorar el rendimiento de la aplicación.There are rare situations when a forced collection might improve your application's performance. En estos casos, se puede inducir la recolección de elementos no utilizados utilizando el método GC.Collect para forzar una recolección de elementos no utilizados.In these cases, you can induce garbage collection by using the GC.Collect method to force a garbage collection.

Use el método GC.Collect cuando haya una reducción significativa de la cantidad de memoria que se está usando en un punto específico del código de la aplicación.Use the GC.Collect method when there is a significant reduction in the amount of memory being used at a specific point in your application's code. Por ejemplo, si la aplicación utiliza un cuadro de diálogo complejo que tiene varios controles, llamar a Collect cuando se cierra el cuadro de diálogo podría mejorar el rendimiento porque reclama inmediatamente la memoria que usa este.For example, if your application uses a complex dialog box that has several controls, calling Collect when the dialog box is closed could improve performance by immediately reclaiming the memory used by the dialog box. Asegúrese de que la aplicación no induce la recolección de elementos no utilizados con demasiada frecuencia, ya que este hecho puede reducir el rendimiento si el recolector de elementos no utilizados intenta reclamar objetos en el momento inadecuado.Be sure that your application is not inducing garbage collection too frequently, because that can decrease performance if the garbage collector is trying to reclaim objects at non-optimal times. Puede proporcionar un valor de enumeración GCCollectionMode.Optimized al método Collect para recopilarlo solo cuando la recolección sea productiva, como se explica en la sección siguiente.You can supply a GCCollectionMode.Optimized enumeration value to the Collect method to collect only when collection would be productive, as discussed in the next section.

Modo de colección de GCGC collection mode

Puede usar una de las sobrecargas del método GC.Collect, que incluye un valor GCCollectionMode para especificar el comportamiento de una colección forzada, como se indica a continuación.You can use one of the GC.Collect method overloads that includes a GCCollectionMode value to specify the behavior for a forced collection as follows.

Valor deGCCollectionMode GCCollectionMode value DescripciónDescription
Default Usa el valor predeterminado de la recolección de elementos no utilizados para la versión de .NET en ejecución.Uses the default garbage collection setting for the running version of .NET.
Forced Obliga a que la recolección de elementos no utilizados se produzca inmediatamente.Forces garbage collection to occur immediately. Esto equivale a llamar a la sobrecarga GC.Collect().This is equivalent to calling the GC.Collect() overload. Tiene como consecuencia una recolección completa de bloqueo de todas las generaciones.It results in a full blocking collection of all generations.

También puede compactar el montón de objetos grandes si establece la propiedad GCSettings.LargeObjectHeapCompactionMode en GCLargeObjectHeapCompactionMode.CompactOnce antes de forzar una recolección de elementos no utilizados de bloqueo completa inmediata.You can also compact the large object heap by setting the GCSettings.LargeObjectHeapCompactionMode property to GCLargeObjectHeapCompactionMode.CompactOnce before forcing an immediate full blocking garbage collection.
Optimized Permite al recolector de elementos no utilizados determinar si la hora actual es la adecuada para reclamar objetos.Enables the garbage collector to determine whether the current time is optimal to reclaim objects.

El recolector de elementos no utilizados puede determinar que una recolección no esté justificada por su insuficiente productividad, en cuyo caso volverá sin reclamar objetos.The garbage collector could determine that a collection would not be productive enough to be justified, in which case it will return without reclaiming objects.

Colecciones de fondo o de bloqueoBackground or blocking collections

Puede llamar a la sobrecarga del método GC.Collect(Int32, GCCollectionMode, Boolean) para especificar si una recolección inducida se está bloqueando o no.You can call the GC.Collect(Int32, GCCollectionMode, Boolean) method overload to specify whether an induced collection is blocking or not. El tipo de colección realizado depende de una combinación de los parámetros mode y blocking del método.The type of collection performed depends on a combination of the method's mode and blocking parameters. mode es un miembro de la enumeración GCCollectionMode y blocking es un valor Boolean.mode is a member of the GCCollectionMode enumeration, and blocking is a Boolean value. En la tabla siguiente se resume la interacción de los argumentos mode y blocking.The following table summarizes the interaction of the mode and blocking arguments.

mode blocking = true blocking = false
Forced o DefaultForced or Default Se realiza una recolección de bloqueo lo antes posible.A blocking collection is performed as soon as possible. Si una colección en segundo plano está en curso y la generación es 0 o 1, el método Collect(Int32, GCCollectionMode, Boolean) desencadena inmediatamente una colección de bloqueo y vuelve cuando la colección finaliza.If a background collection is in progress and generation is 0 or 1, the Collect(Int32, GCCollectionMode, Boolean) method immediately triggers a blocking collection and returns when the collection is finished. Si una colección en segundo plano está en curso y el parámetro generation es 2, el método espera hasta que finaliza la colección en segundo plano, desencadena una generación de bloqueo 2 y luego vuelve.If a background collection is in progress and the generation parameter is 2, the method waits until the background collection is finished, triggers a blocking generation 2 collection, and then returns. Se realiza una recolección lo antes posible.A collection is performed as soon as possible. El método Collect(Int32, GCCollectionMode, Boolean) solicita una colección en segundo plano, pero esto no se garantiza; puede que aún se realice una colección de bloqueo, dependiendo de las circunstancias.The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. Si una colección en segundo plano ya está en curso, el método vuelve inmediatamente.If a background collection is already in progress, the method returns immediately.
Optimized Se puede realizar una recolección de bloqueo, dependiendo del estado del recolector de elementos no utilizados y del parámetro generation.A blocking collection may be performed, depending on the state of the garbage collector and the generation parameter. El recolector de elementos no utilizados intenta proporcionar un rendimiento óptimo.The garbage collector tries to provide optimal performance. Se puede realizar una recolección, según el estado del recolector de elementos no utilizados.A collection may be performed, depending on the state of the garbage collector. El método Collect(Int32, GCCollectionMode, Boolean) solicita una colección en segundo plano, pero esto no se garantiza; puede que aún se realice una colección de bloqueo, dependiendo de las circunstancias.The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. El recolector de elementos no utilizados intenta proporcionar un rendimiento óptimo.The garbage collector tries to provide optimal performance. Si una colección en segundo plano ya está en curso, el método vuelve inmediatamente.If a background collection is already in progress, the method returns immediately.

Vea tambiénSee also