Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Sok alkalmazásnak veszteségmentes adattömörítést és kitömörítést kell használnia. A Tömörítési API leegyszerűsíti ezt a Windows-tömörítési algoritmusok nyilvános API-val való közzétételével. Minden tömörítési algoritmus rendelkezik olyan tulajdonságokkal, amelyek szabályzják a viselkedését. A Compression API egy felületet tesz elérhetővé, amely lehetővé teszi a fejlesztő számára ezen tulajdonságok értékeinek beállítását vagy lekérdezését. A támogatott tömörítési algoritmusok összes tulajdonsága alapértelmezett értékekkel rendelkezik, amelyek ezen tulajdonságok gyakran használt értékeit jelölik. Ha a tömörítéshez és a dekompresszióhoz is szükség van egy tulajdonságra, az alapértelmezett értékek azonosak lesznek, biztosítva, hogy a tömörítés és a tömörítés azonos értékeket használjon.
A tömörítési algoritmus kiválasztása
Miután egy fejlesztő úgy dönt, hogy egy alkalmazásnak össze kell tömörítenie vagy kibontania az adatokat, a következő lépés egy tömörítési algoritmus kiválasztása. Ez a tesztektől függhet, hogy az adott alkalmazás sebességének, tömörítési arányának és memóriaigényének legjobban megfelelő kombinációját találja meg. Az alábbi lista a Tömörítési API által jelenleg támogatott tömörítési algoritmusok relatív összehasonlítását mutatja be. Nem minden beállítás érhető el minden tömörítési algoritmushoz, és az összehasonlítás hozzávetőleges, mert a teljesítmény a bemeneti adatoktól függhet.
XPRESS (TÖMÖRÍTÉSI_ALGORITMUS_XPRESS)
- Nagyon gyors, alacsony erőforrásigényekkel
- Közepes tömörítési arány
- Nagy tömörítési és dekompressziós sebesség
- Kevés memóriaigény
- Támogatja a COMPRESS_INFORMATION_CLASS enumerálásban elérhető COMPRESS_INFORMATION_CLASS_LEVEL lehetőséget. Az alapértelmezett érték (DWORD)0. Egyes adatok esetében a (DWORD)1 érték valamivel lassabb tömörítési sebességgel javíthatja a tömörítési arányt.
XPRESS Huffman kódolással (COMPRESS_ALGORITHM_XPRESS_HUFF)
- A tömörítési arány magasabb, mint COMPRESS_ALGORITHM_XPRESS
- Közepes tömörítési arány
- Közepes és nagy tömörítési és dekompressziós sebesség
- Kevés memóriaigény
- Támogatja a COMPRESS_INFORMATION_CLASS_LEVEL beállítást a COMPRESS_INFORMATION_CLASS felsorolásban. Az alapértelmezett érték (DWORD)0. Egyes adatok esetében a (DWORD)1 érték valamivel lassabb tömörítési sebességgel javíthatja a tömörítési arányt.
MSZIP (COMPRESS_ALGORITHM_MSZIP)
- Több erőforrást használ, mint COMPRESS_ALGORITHM_XPRESS_HUFF
- Az RFC 1951-hez hasonló tömörített blokkot hoz létre.
- Közepes és magas tömörítési arány
- Közepes tömörítési sebesség és nagy felbontási sebesség
- Közepes memóriaigény
LZMS (COMPRESS_ALGORITHM_LZMS)
- Jó algoritmus, ha a tömörítendő adatok mérete meghaladja a 2 MB-ot.
- Nagy tömörítési arány
- Alacsony tömörítési sebesség és nagy felbontási sebesség
- Közepes és magas memóriaigény
- Támogatja a COMPRESS_INFORMATION_CLASS_BLOCK_SIZE beállítást a COMPRESS_INFORMATION_CLASS felsorolásban. A jobb tömörítési arány érdekében javasoljuk, hogy legalább 1 MB méretű legyen.
A használni kívánt tömörítési API-mód kiválasztása
Miután egy fejlesztő kiválasztotta a tömörítési algoritmust, a következő döntés a Tömörítési API két módja közül melyiket használja: puffer vagy blokk mód. A puffer módot a könnyű használat érdekében fejlesztették ki, és a legtöbb esetben ajánlott.
A puffer mód automatikusan felosztja a bemeneti puffert a kiválasztott tömörítési algoritmusnak megfelelő méretű blokkokra. A puffer mód automatikusan formázja és tárolja a tömörítetlen puffer méretét a tömörített pufferben. A tömörített puffer mérete nem lesz automatikusan mentve, és az alkalmazásnak ezt a tömörítéshez kell mentenie. Ne vegye fel a COMPRESS_RAW jelzőt az Algoritmus paraméterbe, amikor meghívja CreateCompressor és CreateDecompressor a puffer mód használatára. A puffer módú alkalmazások kód példáját a A tömörítési API használata puffer módban szakaszban találja.
A blokk mód lehetővé teszi a fejlesztő számára a blokkméret szabályozását, de az alkalmazás több munkát igényel. Blokk mód használatakor az alkalmazásnak a tömörítéskor a bemeneti adatokat megfelelő méretű darabokra kell bontania, majd össze kell állítania őket a tömörítéskor. A blokk mód meghiúsul, ha a bemeneti puffer mérete nagyobb, mint a tömörítési algoritmus belső blokkmérete. A belső blokkméret 32 KB az MSZIP-hez és 1 GB az XPRESS tömörítési algoritmusokhoz. Az LZMS belső blokkmérete 64 GB-ig konfigurálható a memóriahasználat megfelelő növelésével. A tömörített puffer mérete nem lesz automatikusan mentve, és az alkalmazásnak ezt is mentenie kell a tömörítéshez. A TömörítetlenPufferMéret paraméternek a Kitömörítés során pontosan meg kell egyeznie a tömörítetlen adatok eredeti méretével, és nem csupán a kimeneti puffer méretével. Ez azt jelenti, hogy az alkalmazásnak mentenie kell a tömörítetlen adatok pontos eredeti méretét, valamint a tömörített adatokat és a tömörített méretet blokk mód használatakor. Amikor mind a(z) CreateCompressor, mind a(z) CreateDecompressor meghívásakor használja a blokkmódot, vegye fel a COMPRESS_RAW jelzőt a Algoritmus paraméterbe. A blokk módú alkalmazások kód példáját a A Tömörítési API használata blokk módban szakaszban találja.
Egyéni memóriafoglalás
A puffer- és blokkmódú alkalmazások egyéni memóriafoglalási rutint adhatnak meg, amikor meghívják CreateCompressor és CreateDecompressor. A AllocationRoutines paraméter határozza meg a memóriafoglalási rutint tartalmazó COMPRESS_ALLOCATION_ROUTINES struktúrát. Az alkalmazás ezután beállíthatja a kompresszor blokkméretét SetCompressorInformationhasználatával. Olvassa el a A Tömörítési API blokk módú használata szakaszt, ahol példát talál egy egyszerű, testreszabott foglalási eljárásra.