我已經使用DotNetZip庫進行了一個快速測試,該庫打開一個完整的.bmp文件的zip文件並將它們轉換爲.jpg格式。DotNetZip - 讀到內存中
在此之前,我將所有文件寫入文件夾,轉換它們,保存jpg文件&然後刪除原來的bmp文件,這些文件變得混亂。
我不想在內存中先解壓縮它們,轉換爲jpg &然後保存。
該代碼有效,但並不那麼快。任何人都可以給我任何指示,我可以做些什麼來改善代碼嗎?另外,線程幫助?
string zipToUnpack = "c:\\test\\1000.zip";
string unpackDirectory = "c:\\temp\\";
string f = string.Empty;
Bitmap bm;
MemoryStream ms;
using (ZipFile zip = ZipFile.Read(zipToUnpack))
{
foreach (ZipEntry e in zip)
{
if (e.FileName.ToLower().IndexOf(".bmp") > 0)
{
ms = new MemoryStream();
e.Extract(ms);
try
{
bm = new Bitmap(ms);
f = unpackDirectory + e.FileName.ToLower().Replace(".bmp", ".jpg");
bm.Save(f, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception ex)
{
Console.WriteLine("File: " + e.FileName + " " + ex.ToString());
}
ms.Dispose();
}
}
}
由於
什麼是緩慢的一部分? http://www.dijksterhuis.org/timing-function-performance-stopwatch-class/應該有助於找出答案。 – 2011-03-10 22:57:26
感謝秒錶的東西。 它在1分鐘內轉換1000張圖像。我只是想知道是否有人有任何想法來改善整體設計。我很確定這是轉換爲JPG是慢的部分。 我不確定線程是否有幫助,或者即使我可以在這種情況下應用它? – StuffandBlah 2011-03-10 23:09:50
我不明白你會如何應用線程。需要按順序讀取zip文件,因此如果沒有您首先解壓縮的初始解決方案,然後轉換,則無法在線程之間分配負載。即使如此,線程也是讓CPU做更多的工作。但是如果你的硬盤無法跟上,線程是沒有用的。 – 2011-03-10 23:34:53