DmitryKz
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ребята, помогите с такое проблемой: моя программа использует некий блок данных; первоначально он находится в 7zip архиве, в сжатом виде, со своим расширением, и будет доступен для скачивания из Интернета (сейчас этот блок данных в архиве занимает 17 мб, в разархивированном виде (около 200 файлов - 125 мегабайт, самый большой файл - БД, объемом 101 Мб). Этот архив в то же время своего рода инсталлятор - то есть по двойном клике он устанавливается в программу. А точнее говоря - перегоняется в Single File System без компрессии, но с шифрованием, и служит своего рода контейнером, куда программа обращается за данными. Просто мне так удобнее - это пока еще 200 файлов, а дальше будет больше. Но удручает время перегонки - около 3-х минут. Вот код: Код: with CreateInArchive(CLSID_CFormat7z) do begin SFS_File:=TSingleFileSystem.Create('c:\sfs.bkp', fmCreate); OpenFile(fn); //открываем 7-zip архив for i:=0 to NumberOfItems-1 do begin mstr:=TMemoryStream.Create; SFS_Stream:=TSFSFileStream.Create(SFS_File, ItemPath[i], fmCreate); ExtractItem(i, mstr, false); //Извлечение файла из 7зип архива в TMemoryStream; SFS_Stream.LoadFromStream(mstr); FreeAndNil(mstr); FreeAndNil(SFS_Stream); end; end; | Можно ли тут что-то сделать? Забавно то, что если в прилагаемом SFS Manager упаковка в SFS проходит довольно скоро - секунд 5-6. Тут же, как я понимаю, почти все время тратится на создание и убийство потоков. Небольшие добавления: забыл еще добавить, что просто упаковка в SFS папки с моими 200-ми файлами тоже довольно быстра: около 8-10 секунд. Получается, что TMemoryStream тормозит? Я, конечно, могу распаковывать из 7-zip архива в папку и из нее упаковывать в SFS, но не хотелось бы мусорить в файловой системе и убирать за собой. Кроме того, содержимое этих данных, скажем так, защищено авторским правом (не моим ) и хотелось бы убрать эту лазейку к доступу к ним. | Всего записей: 3142 | Зарегистр. 29-09-2005 | Отправлено: 00:00 07-11-2009 | Исправлено: DmitryKz, 10:20 07-11-2009 |
|