Mdf文件插入二进制数据过大

时间:2014-09-24 19:58:18

标签: c# sql-server memorystream varbinary responsestream

我正在使用jpeg并将它们作为varbinary(MAX)数据类型字段中的字节数组插入表中。但是,mdf文件的大小比我插入的所有文件的总大小增加了三到四倍。我正在使用标准的c#编码技术来获取web响应并将其转换为内存流:

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();

    }
}

然而不知何故,512mb的jpeg最终增加了2gb以上的mdf。我在表格中插入的是我使用result.length在这个字段上定义长度。汽车增长率设定为5%。

1 个答案:

答案 0 :(得分:0)

512 MB的jpeg在数据库中应该只需要超过512 MB。 mdf本身可能会变大,但这取决于数据库配置的增长增量。 sp_spaceused应显示已用空间与空闲空间。

但是你使用内存流处理文件的方式实际上非常糟糕。永远不会工作。请阅读Download and Upload images from SQL Server via ASP.Net MVC,了解将文件从HTTP传输到数据库的正确方法。由于应用程序进程内存大小限制以及数据库最低日志记录操作要求,您必须使用UPDATE blob.write。链接的文章更详细地解释了为什么以及如何做到这一点。您也可以使用相同的技术在Web响应中流式传输,而不是在内存中创建完整副本。