Optimierung des Speicherverbrauchs beim Arbeiten mit großen Dateien und großen Datensätzen
Beim Erstellen eines Arbeitsmappen mit großen Datensätzen oder beim Lesen einer großen Microsoft Excel-Datei ist die Gesamtmenge an RAM, die der Prozess benötigt, immer ein Anliegen. Es gibt Maßnahmen, die zur Bewältigung der Herausforderung angepasst werden können. Aspose.Cells bietet einige relevante Optionen und API-Aufrufe, um den Speicherverbrauch zu verringern, zu reduzieren und zu optimieren. Außerdem kann es dem Prozess helfen, effizienter zu arbeiten und schneller zu laufen.
Verwenden Sie die MemorySetting.MEMORY_PREFERENCE-Option, um den Speicherplatz für Zellendaten zu optimieren und die Gesamtspeicherkosten zu senken. Beim Erstellen großer Datensätze für Zellen kann dies im Vergleich zur Verwendung der Standardeinstellung MemorySetting.NORMAL eine bestimmte Menge an Speicherplatz sparen.
Speicheroptimierung
Lesen großer Excel-Dateien
Das folgende Beispiel zeigt, wie eine große Microsoft Excel-Datei im optimierten Modus gelesen wird.
// 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); |
Schreiben großer Excel-Dateien
Das folgende Beispiel zeigt, wie man einen großen Datensatz in optimiertem Modus in ein Arbeitsblatt schreibt.
// 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(); |
Vorsicht
Die Standardeinstellung MemorySetting.NORMAL wird für alle Versionen angewendet. Für einige Situationen, wie das Erstellen einer Arbeitsmappe mit einem großen Datensatz für Zellen, kann die Option MemorySetting.MEMORY_PREFERENCE den Speicherplatz optimieren und die Speicherkosten für die Anwendung senken. Diese Option kann jedoch die Leistung in einigen speziellen Fällen wie folgt beeinträchtigen.
- Zufälliger und wiederholter Zugriff auf Zellen: Die effizienteste Sequenz für den Zugriff auf die Zellensammlung ist Zelle für Zelle in einer Zeile und dann Zeile für Zeile. Insbesondere wenn Sie Zeilen/Zellen über den Enumerator, der von Cells, RowCollection und Row erworben wurde, abrufen, wird die Leistung mit MemorySetting.MEMORY_PREFERENCE maximiert.
- Einfügen & Löschen von Zellen & Zeilen: Bitte beachten Sie, dass bei vielen Einfüge-/Löschvorgängen für Zellen/Zeilen die Leistungseinbußen für den MemorySetting.MEMORY_PREFERENCE-Modus im Vergleich zum MemorySetting.NORMAL-Modus spürbar sein werden.
- Arbeiten mit verschiedenen Zellentypen: Wenn die meisten Zellen Zeichenfolgenwerte oder Formeln enthalten, wird der Speicherverbrauch dem des MemorySetting.NORMAL-Modus entsprechen. Wenn jedoch viele leere Zellen vorhanden sind oder Zellwerte numerisch, boolesch usw. sind, wird die Option MemorySetting.MEMORY_PREFERENCE eine bessere Leistung bieten.