Como instruir o PowerShell para coletar lixo objetos .NET como XmlSchemaSet?

Eu criei um script PowerShell que faz um loop sobre um grande número de arquivos XML Schema (.xsd), e para cada um cria um .NETXmlSchemaSet objeto, chamadasAdd() eCompile() para adicionar um esquema a ele e imprime todos os erros de validação.

Este script funciona corretamente, mas há um vazamento de memória em algum lugar, fazendo com que ele consuma gigabytes de memória se for executado em centenas de arquivos.

O que eu essencialmente faço em um loop é o seguinte:

$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()

(Um script completo para reproduzir este problema pode ser encontrado nesta essência:https://gist.github.com/3002649. Basta executá-lo e observar o aumento do uso de memória no Gerenciador de Tarefas ou no Process Explorer.)

Inspirado em alguns posts, eu tentei adicionar

remove-variable reader, schemaSet

Eu também tentei pegar o$schema deAdd() e fazendo

[void] $schemaSet.RemoveRecursive($schema)

Estes parecem ter algum efeito, mas ainda há um vazamento. Eu estou supondo que instâncias mais antigas deXmlSchemaSet ainda estão usando memória sem serem coletados pelo lixo.

A questão: Como eu ensino corretamente o coletor de lixo que ele pode recuperar toda a memória usada no código acima? Ou, mais geralmente: como posso alcançar meu objetivo com uma quantidade limitada de memória?

questionAnswers(2)

yourAnswerToTheQuestion