Optimieren der Speichernutzung beim Arbeiten mit großen Dateien mit großen Datensätzen
Beim Erstellen einer Arbeitsmappe 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 Problem. Es gibt Maßnahmen, die an die Herausforderung angepasst werden können. Aspose.Cells bietet einige relevante Optionen und API fordert dazu auf, die Speichernutzung zu senken, zu reduzieren und zu optimieren. Außerdem kann es dazu beitragen, dass der Prozess effizienter arbeitet und schneller abläuft.
VerwendenMemorySetting.MEMORY_PREFERENCE Option zum Optimieren des Speichers, der für Zellendaten verwendet wird, um die Gesamtspeicherkosten zu senken. Beim Erstellen eines großen Datensatzes für Zellen kann im Vergleich zur Verwendung der Standardeinstellung eine gewisse Menge an Speicher eingespart werdenSpeichereinstellung.NORMAL.
Speicher optimieren
Große Excel-Dateien lesen
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 ein großes Dataset im optimierten Modus in ein Arbeitsblatt geschrieben 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.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 Standardoption,Speichereinstellung.NORMALgilt für alle Versionen. In einigen Situationen, z. B. beim Erstellen einer Arbeitsmappe mit einem großen Datensatz für Zellen, ist dieMemorySetting.MEMORY_PREFERENCEOption kann die Speichernutzung optimieren und die Speicherkosten für die Anwendung senken. Diese Option kann jedoch in einigen Sonderfällen wie den folgenden die Leistung beeinträchtigen.
- Zufälliger und wiederholter Zugriff auf Cells : Die effizienteste Reihenfolge für den Zugriff auf die Zellensammlung ist Zelle für Zelle in einer Zeile und dann Zeile für Zeile. Vor allem, wenn Sie auf Zeilen/Zellen zugreifen, die vom Enumerator stammenCells, RowCollection undReihe , würde die Leistung mit maximiert werdenMemorySetting.MEMORY_PREFERENCE.
- Einfügen und Löschen von Cells und Zeilen : Bitte beachten Sie, dass bei vielen Einfüge-/Löschvorgängen für Cells/Rows die Leistungseinbußen spürbar sindMemorySetting.MEMORY_PREFERENCE Modus im Vergleich zumSpeichereinstellung.NORMALModus.
- Betrieb auf verschiedenen Cell-Typen : Wenn die meisten Zellen Zeichenfolgenwerte oder Formeln enthalten, sind die Speicherkosten gleichSpeichereinstellung.NORMALModus, aber wenn es viele leere Zellen gibt oder Zellwerte numerisch, bool und so weiter sind, wird dieMemorySetting.MEMORY_PREFERENCEOption wird eine bessere Leistung geben.