Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
En la mayoría de los casos, el recolector de elementos no utilizados puede determinar el mejor momento para realizar una recolección y debe dejar que se ejecute de forma independiente. Hay situaciones poco frecuentes en las que una recopilación forzada podría mejorar el rendimiento de la aplicación. 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.
Use el GC.Collect método cuando haya una reducción significativa en la cantidad de memoria que se usa en un punto específico del código de la aplicación. Por ejemplo, si tu aplicación usa un cuadro de diálogo complejo que tiene varios controles, llamar a Collect al cerrar el cuadro de diálogo podría mejorar el rendimiento al liberar inmediatamente la memoria utilizada por el cuadro de diálogo. Asegúrese de que la aplicación no induce la recolección de elementos no utilizados con demasiada frecuencia, ya que esto puede reducir el rendimiento si el recolector de elementos no utilizados intenta reclamar objetos en momentos no óptimos. Puede proporcionar un GCCollectionMode.Optimized valor de enumeración al Collect método para recopilar solo cuando la recopilación sería productiva, como se describe en la sección siguiente.
Modo de colección de GC
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.
GCCollectionMode valor |
Descripción |
|---|---|
| Default | Usa la configuración predeterminada de recolección de elementos no utilizados para la versión en ejecución de .NET. |
| Forced | Obliga a que la recolección de elementos no utilizados se produzca inmediatamente. Esto equivale a llamar a la sobrecarga GC.Collect(). Tiene como consecuencia una recolección completa de bloqueo de todas las generaciones. 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. |
| Optimized | Permite al recolector de basura determinar si el tiempo actual es óptimo para recuperar objetos. El recolector de elementos no utilizados podría determinar que una recolección no sería lo suficientemente productiva como para justificarse, en cuyo caso devolverá sin reclamar objetos. |
Colecciones de fondo o de bloqueo
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. El tipo de colección realizada depende de una combinación de los parámetros mode y blocking del método.
mode es un miembro de la GCCollectionMode enumeración y blocking es un Boolean valor. En la tabla siguiente se resume la interacción de los mode argumentos y blocking .
mode |
blocking = true |
blocking = false |
|---|---|---|
| Forced o Default | Se realiza una recolección de bloqueo lo antes posible. 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. 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 recolección bloqueante de generación 2 y, a continuación, devuelve. |
Una recogida se realiza lo antes posible. 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. Si una colección en segundo plano ya está en curso, el método vuelve inmediatamente. |
| Optimized | Se puede realizar una recolección de bloqueo, dependiendo del estado del recolector de elementos no utilizados y del parámetro generation. El recolector de basura intenta proporcionar un rendimiento óptimo. |
Se puede realizar una recolección, según el estado del recolector de elementos no utilizados. 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. El recolector de basura intenta proporcionar un rendimiento óptimo. Si una colección en segundo plano ya está en curso, el método vuelve inmediatamente. |