¿Cómo hacer que PowerShell recoja objetos .NET como XmlSchemaSet?

Creé un script de PowerShell que recorre una gran cantidad de archivos de Esquema XML (.xsd), y para cada uno crea un .NETXmlSchemaSet objeto, llamadasAdd() yCompile() para agregarle un esquema e imprimir todos los errores de validación.

Esta secuencia de comandos funciona correctamente, pero hay una pérdida de memoria en alguna parte, lo que hace que consuma gigabytes de memoria si se ejecuta en cientos de archivos.

Lo que esencialmente hago en un bucle es lo siguiente:

$schemaSet = new-object -typename System.Xml.Schema.XmlSchemaSet
register-objectevent $schemaSet ValidationEventHandler -Action {
    ...write-host the event details...
}
$reader = [System.Xml.XmlReader]::Create($schemaFileName)
[void] $schemaSet.Add($null_for_dotnet_string, $reader)
$reader.Close()
$schemaSet.Compile()

(Se puede encontrar un script completo para reproducir este problema en esta lista:https://gist.github.com/3002649. Simplemente ejecútelo y observe cómo aumenta el uso de la memoria en el Administrador de tareas o en el Explorador de procesos.)

Inspirado por algunas publicaciones de blog, intenté agregar

remove-variable reader, schemaSet

También traté de recoger el$schema desdeAdd() y haciendo

[void] $schemaSet.RemoveRecursive($schema)

Estos parecen tener algún efecto, pero todavía hay una fuga. Estoy suponiendo que los casos más antiguos deXmlSchemaSet Seguimos usando la memoria sin que sea recogida de basura.

La pregunta: ¿Cómo le enseño correctamente al recolector de basura que puede recuperar toda la memoria utilizada en el código anterior? O más generalmente: ¿cómo puedo lograr mi objetivo con una cantidad limitada de memoria?

Respuestas a la pregunta(2)

Su respuesta a la pregunta