0

我正在获取 jpeg 并将它们作为 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 的 jpeg 最终使 mdf 的大小超过了 2gb。在我插入表格的地方,我也在使用 result.length 定义该字段的长度。自动增长设置为 5%。

4

1 回答 1

0

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

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

于 2014-09-24T20:27:32.563 回答