Утечки памяти C# в API ASP.NET CoreC#

Место общения программистов C#
Ответить
Anonymous
 Утечки памяти C# в API ASP.NET Core

Сообщение Anonymous »

У меня есть ASP.NET Core API.
Маршрут может выполнять несколько сценариев C# из базы данных, чтобы получить некоторые рассчитанные результаты в одном и том же контексте/глобальных значениях.
Итак, у меня есть этот код:

Код: Выделить всё

    public static async Task TryEvalAsync(this T formulaContext) where T : FormulaContext
{
FormulaEvalException res = null;
ScriptState state = null;
var scriptOptions = ScriptOptions.Default.WithReferences("System", "System.Linq", "System.Globalization", "Microsoft.CSharp").WithImports(new[] { "System", "System.Linq", "System.Math", "System.Globalization", "System.Collections.Generic" });
foreach (var formulaList in formulaContext.AllFormulas.Values)
{
foreach (var formula in formulaList)
{
formulaContext.CurrentFormula = formula;
try
{
if (state == null)
{
state = await CSharpScript.RunAsync(formula.Script, scriptOptions, formulaContext);
}
else
{
state = await state.ContinueWithAsync(formula.Script);
}
var result = state.ReturnValue;
if (result == null)
{
if (res == null)
{
res = new FormulaEvalException(formula.Title + " : No result");
}
continue;
}

formula.Result = result;
}
catch (CompilationErrorException ex)
{
if (res == null)
{
res = new FormulaEvalException(formula.Title + ex.Message);
}
continue;
}
catch
{
continue;
}
}
}

return res;
}
Этот код приводит к утечкам памяти, и пользователь не может повторить эти запросы.
Из моих предыдущих поисков я получил некоторую информацию в виде моего класса FormulaContext, который находится в другом проекте. Поэтому я поместил его в модельный проект вне моего проекта API. Но у меня все еще есть эта проблема.
Я попробовал несколько способов выполнить свой сценарий (например, с помощью CSharpScript.Create или CSharpScript.EvaluateAsync), но память по-прежнему не освобождается.
Я также слышал о классе AppDomain, позволяющем выполнять мой сценарий в песочнице и освобождать память после использования, но AppDomain больше не используется в ASP.NET Core.

Подробнее здесь: https://stackoverflow.com/questions/533 ... t-core-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»