Оптимизация использования памяти при работе с большими файлами с большими наборами данных
При создании рабочей книги с большими наборами данных или при чтении большого файла Excel Microsoft общий объем оперативной памяти, который потребуется процессу, всегда вызывает беспокойство. Существуют меры, которые можно адаптировать для решения этой проблемы. Aspose.Cells предоставляет некоторые соответствующие параметры, а API вызывает снижение, сокращение и оптимизацию использования памяти. Кроме того, это может помочь процессу работать более эффективно и быстрее.
ИспользоватьНастройка памяти.MEMORY_PREFERENCE возможность оптимизировать память, используемую для данных ячеек, чтобы снизить общую стоимость памяти. При создании большого набора данных для ячеек это может сэкономить определенный объем памяти по сравнению с использованием настройки по умолчанию.ПамятьНастройка.НОРМАЛЬНЫЙ.
Оптимизация памяти
Чтение больших файлов Excel
В следующем примере показано, как прочитать большой файл Excel Microsoft в оптимизированном режиме.
// 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); |
Запись больших файлов Excel
В следующем примере показано, как записать большой набор данных на лист в оптимизированном режиме.
// 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(); |
Осторожность
Вариант по умолчанию,ПамятьНастройка.НОРМАЛЬНЫЙприменяется для всех версий. В некоторых ситуациях, например при создании рабочей книги с большим набором данных для ячеек,Настройка памяти.MEMORY_PREFERENCEПараметр может оптимизировать использование памяти и снизить затраты памяти для приложения. Однако этот параметр может снизить производительность в некоторых особых случаях, таких как следующие.
- Доступ к Cells в случайном порядке и повторно : наиболее эффективная последовательность для доступа к коллекции ячеек — ячейка за ячейкой в одной строке, а затем строка за строкой. Особенно, если вы обращаетесь к строкам/ячейкам с помощью Enumerator, полученного изCells, RowCollection иСтрока , производительность будет максимальной приНастройка памяти.MEMORY_PREFERENCE.
- Вставка и удаление Cells и строк : Обратите внимание, что при большом количестве операций вставки/удаления для Cells/Rows снижение производительности будет заметным дляНастройка памяти.MEMORY_PREFERENCE режим по сравнению сПамятьНастройка.НОРМАЛЬНЫЙрежим.
- Работа с различными типами Cell : если большинство ячеек содержат строковые значения или формулы, затраты памяти будут такими же, какПамятьНастройка.НОРМАЛЬНЫЙрежиме, но если есть много пустых ячеек или значения ячеек являются числовыми, логическими и т. д.,Настройка памяти.MEMORY_PREFERENCEвариант даст лучшую производительность.