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

本文关键字:插入 二进制 数据 文件 Mdf | 更新日期: 2023-09-27 18:24:33

我正在获取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();
    }
}

然而,不知何故,512mb的jpegs最终使mdf的大小超过了2gb。在我插入表格的地方,我也使用result.length.Auto-grow设置为5%来定义这个字段的长度。

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

512 MB的jpeg在数据库中应该只占用512 MB多一点。mdf本身可能会增长得更大,但这取决于数据库配置的增长增量。sp_spaceused应显示已使用空间与可用空间的对比。

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