Как я могу предотвратить утечку памяти в CompileAssemblyFromSource?

У меня есть код на C #, который использует CSharpCodeProvider.CompileAssemblyFromSource для создания сборки в памяти. После сборки сборки мое приложение использует больше памяти, чем до создания сборки. Мой код находится в веб-приложении ASP.NET, но яМы продублировали эту проблему в WinForm. Я'm с использованием System.GC.GetTotalMemory (true) и профилировщика памяти ANTS Red Gate для измерения прироста (около 600 байт с примером кода).

Из поисков яПохоже, утечка происходит от создания новых типов, а не от каких-либо объектов, которые ядержу ссылки на. Некоторые из веб-страниц, которые яЯ обнаружил, что упомянул что-то о AppDomain, но я неТ понять. Может кто-нибудь объяснить, чточто здесь происходит и как это исправить?

Вот'Вот пример кода для утечки:

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;
    }
}

Обновление 1: Этот вопрос может быть связан:Динамическая загрузка и выгрузка dll, созданного с помощью CSharpCodeProvider

Обновление 2: Пытаясь понять домены приложения больше, я нашел это:Что такое домен приложения - объяснение для начинающих .Net

Обновление 3: Чтобы уточнить, яЯ ищу решение, которое обеспечивает те же функциональные возможности, что и код выше (компиляция и предоставление доступа к сгенерированному коду) без утечки памяти. Похоже, что решение будет включать создание нового домена приложений и маршалинг.

Ответы на вопрос(3)

Ваш ответ на вопрос