¿Cómo puedo evitar que CompileAssemblyFromSource pierda memoria?

Tengo un código C # que utiliza CSharpCodeProvider.CompileAssemblyFromSource para crear un ensamblaje en la memoria. Una vez que el ensamblaje se ha recolectado en la basura, mi aplicación usa más memoria que antes de crear el ensamblaje. Mi código está en una aplicación web ASP.NET, pero he duplicado este problema en un WinForm. Estoy usando System.GC.GetTotalMemory (true) y Red Gate ANTS Memory Profiler para medir el crecimiento (alrededor de 600 bytes con el código de muestra).

A partir de la búsqueda que he hecho, parece que la filtración proviene de la creación de nuevos tipos, no realmente de ningún objeto al que tengo referencias. Algunas de las páginas web que he encontrado han mencionado algo sobre el dominio de aplicación, pero no entiendo. ¿Alguien puede explicar qué está pasando aquí y cómo solucionarlo?

Aquí hay algunos ejemplos de código para fugas:

private void leak()
{
    CSharpCodeProvider codeProvider = new CSharpCodeProvider();
    CompilerParameters parameters = new CompilerParameters();
    parameters.GenerateInMemory = true;
    parameters.GenerateExecutable = false;

    parameters.ReferencedAssemblies.Add("system.dll");

    string sourceCode = "using System;\r\n";
    sourceCode += "public class HelloWord {\r\n";
    sourceCode += "  public HelloWord() {\r\n";
    sourceCode += "    Console.WriteLine(\"hello world\");\r\n";
    sourceCode += "  }\r\n";
    sourceCode += "}\r\n";

    CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceCode);
    Assembly assembly = null;
    if (!results.Errors.HasErrors)
    {
        assembly = results.CompiledAssembly;
    }
}

Actualización 1: Esta pregunta puede estar relacionada:Cargar y descargar dinámicamente un archivo DLL generado usando CSharpCodeProvider

Actualización 2: Tratando de entender más los dominios de aplicación, encontré esto:¿Qué es un dominio de aplicación? Una explicación para los principiantes de .Net

Actualización 3: Para aclarar, estoy buscando una solución que brinde la misma funcionalidad que el código anterior (compilación y acceso al código generado) sin pérdida de memoria. Parece que la solución implicará la creación de un nuevo dominio de aplicación y cálculo de referencias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta