我在用##
编写的 Windows Mobile 应用程序上使用SharpZipLib进行gzip我有这段代码
public static bool gzDecompressFile(String inputFilePath, String outputFilePath)
{
if (!File.Exists(inputFilePath))
return false;
if (File.Exists(outputFilePath))
File.Delete(outputFilePath);
FileStream fs = File.OpenRead(inputFilePath);
FileStream fsOut = File.OpenWrite(outputFilePath);
GZipInputStream gzipIn = new GZipInputStream(fs);
// Compress file in 1kb chunks
byte[] chunk = new byte[1024];
int read = 1;
while (read > 0)
{
read = gzipIn.Read(chunk, 0, chunk.Length);
if (read > 0)
{
fsOut.Write(chunk, 0, read);
}
}
fsOut.Close();
fs.Close();
return true;
}
对于1.6MB - > 7MB减压需要4-5分钟 你知道 Compact Framework 更好吗?
答案 0 :(得分:2)
在4分钟内将1.6MB压缩到7MB非常慢。
想到的一些事项:
我们最初使用SharpLibZip,但切换到商业Xceed ZIP.NET库以利用批处理功能(以及对.NET和.NET Compact Frameworks的支持)。 Xceed库也支持GZip。即使在我们过时的400 MHz Windows CE 4.2设备上,我们只需要大约20-30秒来解压缩一个6 MB的文件(尽管使用XCeed ZIP.NET在ZIP中)。
另外,如果我没弄错的话,我相信.NET Compact Framework支持GZip。在旁注中,将FileStream放在using语句中,以确保在方法中间发生异常时关闭它们。
答案 1 :(得分:1)
压缩非常占用CPU。可能是......那需要多长时间。
尝试DotNetZip - 不确定是否更快,但它是免费的,易于尝试。 DotNetZip中有一个GZipStream,它取代了.NET BCL中的GZipStream。
由于您正在进行GZIP而不是ZIP,因此您只需要Ionic.Zlib.dll,而不是Ionic.Zip.dll。前者是后者的严格子集。
编辑:代码示例
using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress))
{
using (var raw = System.IO.File.Create(outputFile))
{
using (Stream compressor = new GZipStream(raw, CompressionMode.Compress))
{
byte[] buffer = new byte[WORKING_BUFFER_SIZE];
int n;
while ((n= input.Read(buffer, 0, buffer.Length)) != 0)
{
compressor.Write(buffer, 0, n);
}
}
}
}
(上面代码中的GZipStream由Ionic.Zlib.dll提供。)
答案 2 :(得分:0)
我将ZIP组件用作Resco Mobile Toolkit的一部分:http://www.resco.net/developer/mobileformstoolkit/overview.aspx
工具包的价格可能过高 - 这取决于您是否需要任何其他控件。