我正在使用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%。
答案 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响应中流式传输,而不是在内存中创建完整副本。