Composici�n paralela de Archivos ZIP
Descripci�n general
La API Aspose.ZIP proporciona la capacidad de componer archivos ZIP.�Debido a que las entradas de dicho archivo se pueden comprimir de forma independiente, es posible paralelizar la creaci�n de archivos hasta cierto punto.
ZIP multiproceso: explicaci�n
Utilice ParallelOptions para indicar que el archivo debe prepararse con varios n�cleos de CPU.
Configurar ParallelCompressInMemory indica la estrategia que elegimos para realizar m�ltiples tareas. Aqu� hay tres opciones:
ParallelCompressionMode.Never: la compresi�n de todas las entradas es secuencial. S�lo un n�cleo de CPU funciona con compresi�n y vac�a los datos comprimidos a medida que llegan.ParallelCompressionMode.Always: fuerza la compresi�n de entradas en diferentes subprocesos independientemente del tama�o de la entrada, la memoria disponible y otros factores. Cada n�cleo de la CPU comprime simult�neamente un archivo manteniendo sus datos comprimidos en la RAM. Una vez que se comprime la entrada, se descarga en el flujo de resultados. Si su cantidad de RAM es peque�a y el tama�o total de algunas N entradas (donde N es la cantidad de n�cleos de CPU) es enorme, puede suceder que toda la RAM disponible para CLR se agote y surja OutOfMemoryExcepton.ParallelCompressionMode.Auto: El modo inteligente. Estima los n�cleos de CPU, los tama�os de las entradas, la memoria disponible y elige si comprimir las entradas en paralelo o secuencialmente. En este modo, algunas entradas m�s peque�as se comprimen en paralelo y otras de forma secuencial. Las entradas LZMA no se comprimen en paralelo debido al alto consumo de memoria. Generalmente, es seguro optar por esta opci�n, Aspose.ZIP desconf�a de las estimaciones y cambia a la compresi�n secuencial como alternativa. Hay una propiedad m�s de ParallelOptions para este modo: AvailableMemorySize. No tiene sentido para ning�n otro modo. En t�rminos generales, es el l�mite superior de memoria asignada al comprimir entradas con todos los n�cleos de CPU, en megabytes. Aspose.ZIP usa ese n�mero para estimar el tama�o m�s grande de entrada que es seguro comprimir en paralelo. Las entradas por encima del umbral se comprimir�n secuencialmente. DisponibleMemorySize es un arma de doble filo: si se establece demasiado alto con entradas grandes, puede producir agotamiento de la RAM, intercambio intenso e incluso podr�a ser una excepci�n de falta de memoria. Si se establece demasiado bajo, la mayor�a de las entradas se comprimir�n de forma secuencial sin mucha aceleraci�n. Por lo tanto, los usuarios sofisticados pueden asignarlo teniendo en cuenta las compensaciones.
Le recomendamos que juegue con diferentes modos de compresi�n paralela en sus datos t�picos para determinar cu�l es la mejor configuraci�n en su caso.
C�mo crear un archivo ZIP con compresi�n paralela en un ejemplo de C#
Pasos: Crear un archivo ZIP con compresi�n paralela en C#
- Abra una secuencia de archivos (
FileStream) enFileMode.Createpara crear un nuevo archivo ZIP (archive.zip). - Inicialice un nuevo objeto “Archivo” para administrar entradas ZIP.
- Utilice el m�todo
CreateEntrypara agregar varias entradas, como “first.bin” y “last.bin”, usandoFile.OpenReadpara leer de los archivos fuente (data1.binydatosN.bin). - Configure
ArchiveSaveOptionsconParallelOptions, dondeParallelCompressInMemoryest� configurado enParallelCompressionMode.Always, lo que permite la compresi�n paralela para un archivado m�s r�pido. - Guarde el archivo con las opciones especificadas utilizando el m�todo “Guardar”.
1 using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
2 {
3 using (Archive archive = new Archive())
4 {
5 archive.CreateEntry("first.bin", File.OpenRead("data1.bin"));
6 ...
7 archive.CreateEntry("last.bin", File.OpenRead("dataN.bin"));
8 archive.Save(zipFile, new ArchiveSaveOptions()
9 {
10 ParallelOptions = new ParallelOptions()
11 { ParallelCompressInMemory = ParallelCompressionMode.Always }
12 });
13 }
14 }