Оптимизация использования памяти при работе с большими файлами с большими наборами данных
При создании рабочей книги с большими наборами данных или при чтении большого файла Excel Microsoft общий объем оперативной памяти, который потребуется процессу, всегда вызывает беспокойство. Существуют меры, которые можно адаптировать для решения этой проблемы. Aspose.Cells предоставляет некоторые соответствующие параметры, а API вызывает снижение, сокращение и оптимизацию использования памяти. Кроме того, это может помочь процессу работать более эффективно и быстрее.
ИспользоватьMemorySetting.MemoryPreferenceвозможность оптимизировать использование памяти для данных ячеек и снизить общую стоимость памяти. При построении большого набора данных для ячеек может сэкономить определенный объем памяти по сравнению с использованием настройки по умолчанию (MemorySetting.Нормальный).
Оптимизация памяти
Чтение больших файлов Excel
В следующем примере показано, как прочитать большой файл Excel Microsoft в оптимизированном режиме.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Specify the LoadOptions | |
LoadOptions opt = new LoadOptions(); | |
// Set the memory preferences | |
opt.MemorySetting = MemorySetting.MemoryPreference; | |
// 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-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// 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.Settings.MemorySetting = MemorySetting.MemoryPreference; | |
// 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.Worksheets[0].Cells; | |
cells.MemorySetting = MemorySetting.MemoryPreference; | |
// 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.Worksheets.Add("Sheet2").Cells; | |
// ......... | |
// Input large dataset into the cells of the worksheet. | |
// Your code goes here. | |
// ......... |
Осторожность
Вариант по умолчанию,MemorySetting.Нормальныйприменяется для всех версий. В некоторых ситуациях, например при создании рабочей книги с большим набором данных для ячеек,MemorySetting.MemoryPreferenceПараметр может оптимизировать использование памяти и снизить затраты памяти для приложения. Однако этот параметр может снизить производительность в некоторых особых случаях, таких как следующие.
- Доступ к Cells в случайном порядке и повторно : наиболее эффективная последовательность для доступа к коллекции ячеек — ячейка за ячейкой в одной строке, а затем строка за строкой. Особенно, если вы обращаетесь к строкам/ячейкам с помощью Enumerator, полученного изCells, RowCollection иСтрока , производительность будет максимальной приMemorySetting.MemoryPreference.
- Вставка и удаление Cells и строк : Обратите внимание, что при большом количестве операций вставки/удаления для Cells/Rows снижение производительности будет заметным дляПамятьPreference режим по сравнению сНормальныйрежим.
- Работа с различными типами Cell : если большинство ячеек содержат строковые значения или формулы, затраты памяти будут такими же, какНормальный режиме, но если есть много пустых ячеек или значения ячеек являются числовыми, логическими и т. д.,MemorySetting.MemoryPreferenceвариант даст лучшую производительность.