System.OutOfMemoryException: 'Exception_WasThrown'

Следуйте моему коду:

[HttpGet]
public ActionResult StreamVideo(int type1, int type2)
{
    using (var ctx = new Entities())
    {
        var result = ctx.Table.Where(x => x.Type1 == type1 && x.Type2 == type2).FirstOrDefault();

        byte[] video_byte = result.Video;

        return new RangeFileContentResult(video_byte, "video/x-msvideo", "NameFile.mp4", DateTime.Now);
    }
}

У меня есть "модальный загрузчик", где он имеет видео-контент. При закрытии модального и открытии снова, это создает проблему:

System.OutOfMemoryException: 'Exception_WasThrown'

Проблема возникает на линии:

var result = ctx.Table.Where(x => x.Type1 == type1 && x.Type2 == type2).FirstOrDefault();

Любое решение?

1 ответ

При получении большого количества varbinary данные, которые вы должны быть осторожны, чтобы не перегружать кучу больших объектов. Попробуйте вместо этого получить данные в виде потока. EntityCommand а также SqlCommand Вы можете получать читатели, и вы можете получить поток от них.

SqlClient Streaming

using (connection)
{
    SqlCommand command = new SqlCommand(
      $"SELECT Video FROM Table where Type1={type1} and Type2={type2};",
      connection);
    connection.Open();

    SqlDataReader reader = command.ExecuteReader();

    reader.Read();
    var stream = reader.GetStream(0);

   ... Use the stream here...
}
Другие вопросы по тегам