Optimización del uso de memoria al trabajar con archivos grandes que contienen conjuntos de datos extensos
Cuando se construye un libro con grandes conjuntos de datos o se lee un archivo grande de Microsoft Excel, la cantidad total de RAM que utilizará el proceso siempre es una preocupación. Existen medidas que se pueden adaptar para enfrentar el desafío. Aspose.Cells proporciona algunas opciones y llamadas de API relevantes para reducir y optimizar el uso de memoria, lo que puede ayudar al proceso a trabajar de manera más eficiente y rápida.
Utilice la opción MemorySetting.MEMORY_PREFERENCE para optimizar el uso de memoria para los datos de las celdas y así disminuir el costo total de memoria. Al construir un conjunto de datos grande para las celdas, puede ahorrar una cierta cantidad de memoria en comparación con el uso de la configuración predeterminada MemorySetting.NORMAL.
Optimización de memoria
Lectura de archivos Excel grandes
El siguiente ejemplo muestra cómo leer un archivo grande de Microsoft Excel en modo optimizado.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(ReadLargeExcelFiles.class); | |
// Specify the LoadOptions | |
LoadOptions opt = new LoadOptions(); | |
// Set the memory preferences | |
opt.setMemorySetting(MemorySetting.MEMORY_PREFERENCE); | |
// Instantiate the Workbook | |
// Load the Big Excel file having large Data set in it | |
Workbook wb = new Workbook(dataDir + "Book1.xlsx", opt); |
Escribiendo Archivos de Excel Grandes
El siguiente ejemplo muestra cómo escribir un conjunto de datos extenso en una hoja de cálculo en modo optimizado.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getSharedDataDir(WritingLargeExcelFiles.class) + "articles/"; | |
// Instantiate a new Workbook | |
Workbook wb = new Workbook(); | |
// Set the memory preferences | |
// Note: This setting cannot take effect for the existing worksheets that are created before using the below line of code | |
wb.getSettings().setMemorySetting(MemorySetting.MEMORY_PREFERENCE); | |
/* | |
* Note: The memory settings also would not work for the default sheet i.e., "Sheet1" etc. automatically created by the | |
* Workbook. To change the memory setting of existing sheets, please change memory setting for them manually: | |
*/ | |
Cells cells = wb.getWorksheets().get(0).getCells(); | |
cells.setMemorySetting(MemorySetting.MEMORY_PREFERENCE); | |
// Input large dataset into the cells of the worksheet.Your code goes here. | |
// Get cells of the newly created Worksheet "Sheet2" whose memory setting is same with the one defined in | |
// WorkbookSettings: | |
cells = wb.getWorksheets().add("Sheet2").getCells(); |
Precaución
La opción predeterminada, MemorySetting.NORMAL se aplica a todas las versiones. Para algunas situaciones, como la creación de un libro de trabajo con un gran conjunto de datos para celdas, la opción MemorySetting.MEMORY_PREFERENCE puede optimizar el uso de memoria y disminuir el costo de memoria para la aplicación. Sin embargo, esta opción puede degradar el rendimiento en algunos casos especiales como sigue.
- Acceso a celdas de forma aleatoria y repetida: La secuencia más eficiente para acceder a la colección de celdas es celda por celda en una fila, y luego fila por fila. Especialmente, si accede a filas/celdas mediante el Enumerador adquirido de Cells, RowCollection y Row, el rendimiento será maximizado con MemorySetting.MEMORY_PREFERENCE.
- Inserción y eliminación de celdas y filas: Tenga en cuenta que si hay muchas operaciones de inserción/eliminación para Celdas/Filas, la degradación del rendimiento será notable para el modo MemorySetting.MEMORY_PREFERENCE en comparación con el modo MemorySetting.NORMAL .
- Operación en diferentes tipos de celdas: Si la mayoría de las celdas contienen valores de cadena o fórmulas, el costo de memoria será el mismo que el modo MemorySetting.NORMAL pero si hay muchas celdas vacías, o los valores de las celdas son numéricos, booleanos, etc., la opción MemorySetting.MEMORY_PREFERENCE dará un mejor rendimiento.