现在我们有一个数据库表(SQL Server 2008 R2),它在图像类型列中存储上传的文件(PDF、DOC、TXT 等)。用户从 ASP.NET 应用程序上传此文件。我的项目是处理这个表的增长大小,并且在此过程中我提出了几个问题。
在数据库方面,我发现图像列类型据说有点贬值?我是否会从切换到 varbinary(max) 获得任何好处,或者我应该说 varbinary(5767168),因为这是我的文件大小上限,或者我也可以让它保持为图像类型,只要空间效率是担心的?
在应用程序端,我想压缩字节数组。微软内置的 GZip 有时会使文件变大而不是变小。我切换到 SharpZipLib,它好多了,但我仍然偶尔会遇到同样的问题。在我大规模实施之前,有没有办法找出平均文件压缩节省?我很难找出他们使用的底层算法。
是否值得编写我自己的 Huffman 代码算法,或者在压缩文件偶尔比原始文件大的情况下会出现同样的问题?
作为参考,以防万一,这是我的应用程序中的代码:
using ICSharpCode.SharpZipLib.GZip;
private static byte[] Compress(byte[] data)
{
MemoryStream output = new MemoryStream();
using (GZipOutputStream gzip = new GZipOutputStream(output))
{
gzip.IsStreamOwner = false;
gzip.Write(data, 0, data.Length);
gzip.Close();
}
return output.ToArray();
}
private static byte[] Decompress(byte[] data)
{
MemoryStream output = new MemoryStream();
MemoryStream input = new MemoryStream();
input.Write(data, 0, data.Length);
input.Position = 0;
using (GZipInputStream gzip = new GZipInputStream(input))
{
byte[] buff = new byte[64];
int read = gzip.Read(buff, 0, buff.Length);
while (read > 0)
{
output.Write(buff, 0, read);
read = gzip.Read(buff, 0, buff.Length);
}
gzip.Close();
}
return output.ToArray();
}
提前感谢您的帮助。:)