Содержимое ответа HttpActionExecutedContext ReadAsByteArrayAsync выдает исключение из памяти

В моем проекте все данные, полученные из базы данных, сжимаются с помощью GzipCompression. Я сталкиваюсь с исключением из памяти только тогда, когда я извлекаю данные из таблицы с кодом = XYE01, которая имеет 315 записей.

Я попробовал GC.Collect() и GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce; перед сжатием данных я все еще сталкиваюсь с проблемой

[AttributeUsage(AttributeTargets.Method)]
public class GZipCompressionAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        if (actionExecutedContext.Response != null)
        {
            try
            {
                var content = actionExecutedContext.Response.Content;
                var bytes = content != null ? content.ReadAsByteArrayAsync().Result : null;
                var zlibbedContent = bytes != null ? GZipCompressionHelper.Compression(bytes) : new byte[0];
                actionExecutedContext.Response.Content = new ByteArrayContent(zlibbedContent);
                actionExecutedContext.Response.Content.Headers.Remove("Content-Type");
                actionExecutedContext.Response.Content.Headers.Add("Content-Encoding", "gzip");
                actionExecutedContext.Response.Content.Headers.Add("Content-Type", "application/json");
            }
            catch (Exception ex)
            {
                Logger.Log(LogLevel.Error, string.Format("Cannot compress on query: {0}.", actionExecutedContext.Request.RequestUri.PathAndQuery), ex);
            }
        }

        base.OnActionExecuted(actionExecutedContext);
    }
}

  #region  publicMethods
    // GET api/RequiredStartingValue/GetRequiredStartingValues?code=
    [GZipCompression]
    [HttpGet, CacheOutput(NoCache = true)]
    [UnitOfWorkAction(ReadUncommitted = true)]
    public IHttpActionResult GetRequiredStartingValues(string code)
    {
        List<StartingValue> requiredStartingValues = _startingValuesRepository.GetRequiredStartingValues(customerCode);
        return Ok(requiredStartingValues );
    }
    #endregion

Как увеличить память? Другие таблицы, в которых поступает 900 строк, также работают нормально, но с 315 строками возникает исключение из памяти, которое я не могу понять.

Пожалуйста, дайте мне несколько предложений, так как я новичок в WebAPI и выборке базы данных, я не могу понять основную причину.

Спасибо, Нагасри.


person NAGASREE    schedule 23.06.2021    source источник
comment
Не могли бы вы добавить трассировку стека из вашего исключения? Можете ли вы изменить запрос, чтобы он возвращал меньше строк? Например, всего 2 - эта ошибка все еще возникает?   -  person Leszek P    schedule 23.06.2021
comment
это старое ядро ​​WebAPI 2.2 или Net? Если ядро ​​​​Net, посмотрите stackoverflow.com/questions/3802107/   -  person Leszek P    schedule 23.06.2021
comment
@LeszekP При меньшем количестве строк исключение не выдается.   -  person NAGASREE    schedule 23.06.2021
comment
Это не NetCore. Это Angualr Js + .Net framework 4.5.1.   -  person NAGASREE    schedule 23.06.2021
comment
Проверьте диспетчер задач и посмотрите, используете ли вы всю память? Единственный способ решения — добавить больше памяти, закрыть приложения, которые используют память, или убедиться, что вы используете пространство подкачки, где жесткий диск будет использоваться, когда вы превысите объем памяти (замедлит работу приложения).   -  person jdweng    schedule 23.06.2021
comment
@NAGASREE, вы, возможно, уже знаете это, но 315 записей из таблицы, на которую вы ссылаетесь, по-прежнему могут занимать больше памяти, чем 900 записей, скажем, из таблицы поиска, особенно если рассматриваемая таблица (с 315 строками) хранит большие двоичные объекты в формате, похожем на BLOB.   -  person fradsham    schedule 23.06.2021