Mdf файл становится слишком большим, вставляя двоичные данные

Я беру jpegs и вставляю их в таблицу в виде байтового массива в поле типа данных varbinary(MAX). Однако размер файла mdf увеличивается в три-четыре раза по сравнению с общим размером всех файлов, которые я вставляю. Я использую стандартную технику кодирования C#, чтобы взять веб-ответ и преобразовать его в поток памяти:

byte[] result;
byte[] buffer = new byte[4096];

using (Stream responseStream = request.GetResponse().GetResponseStream())
{
    using (MemoryStream memoryStream = new MemoryStream())
    {
        int count = 0;
        do
        {
            count = responseStream.Read(buffer, 0, buffer.Length);
            memoryStream.Write(buffer, 0, count);

        } while (count != 0);

        result = memoryStream.ToArray();

    }
}

И все же, как-то 512 Мб в формате JPEG заканчиваются тем, что увеличивают размер mdf до 2 Гб. Когда я делаю вставку в таблицу, я также определяю длину в этом поле, используя result.length. Автоматический рост установлен на 5%.

1 ответ

JPEG 512 МБ должен занимать чуть более 512 МБ в базе данных. Размер самого mdf может увеличиться, но это зависит от настроенного приращения базы данных. sp_spaceused должен показывать использованное и свободное пространство.

Но способ обработки файла на самом деле довольно плох, используя поток памяти. Никогда не будет работать. Прочитайте Загрузка и выгрузка изображений с SQL Server через ASP.Net MVC для правильного способа потоковой передачи файлов из HTTP в базу данных. Вы должны использовать UPDATE blob.write из-за ограничений размера памяти процесса приложения, а также из-за минимально зарегистрированных операций базы данных. Связанная статья объясняет более подробно, почему и как это сделать. Вы можете использовать ту же технику и для потоковой передачи в веб-ответе, без создания полной копии в памяти.

Другие вопросы по тегам