2

SharpZipLibを使用して、Windows Phone 7 で 5000 個のファイルを含む zip ファイルを解凍したところ、完了するまでに 5 分以上かかりました。コードは次のとおりです。

using (StreamReader httpwebStreamReader = new StreamReader(ea.Result))
            {
                //open isolated storage to save files
                using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    using (ZipInputStream s = new ZipInputStream(httpwebStreamReader.BaseStream))
                    {
                        //s.Password = "123456";//if archive is encrypted
                        ZipEntry theEntry;
                        while ((theEntry = s.GetNextEntry()) != null)
                        {
                            string directoryName = Path.GetDirectoryName(theEntry.Name);
                            string fileName = Path.GetFileName(theEntry.Name);

                            // create directory
                            if (directoryName.Length > 0)
                            {
                                isoStore.CreateDirectory(directoryName);
                            }

                            if (fileName != String.Empty)
                            {
                                //save file to isolated storage
                                using (BinaryWriter streamWriter =
                                        new BinaryWriter(new IsolatedStorageFileStream(theEntry.Name,
                                            FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write, isoStore)))
                                {

                                    int size = 2048;
                                    byte[] data = new byte[2048];
                                    while (true)
                                    {
                                        size = s.Read(data, 0, data.Length);
                                        if (size > 0)
                                        {
                                            streamWriter.Write(data, 0, size);
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

なぜそんなに遅いのですか?解凍アクションを高速化するにはどうすればよいですか? 誰でも知っていますか?

4

1 に答える 1

0

バッファサイズを増やす必要があると思います。行を変更します

int size = 2048;
byte[] data = new byte[2048];

そして、を(32 * 1024)の2048ようなものに変更します。32768

2KBのブロックサイズは、フラッシュストレージへの個別の書き込みを大量に行っています。私の経験では、これはやや遅いことであり、デバイスごとに異なる可能性があります。32KBのブロックサイズは16分の1になるはずですが、それが直接16分の1のスピードアップになるかどうかはわかりません。返信に興味があります。

于 2012-07-30T10:57:02.447 に答える