Optimera minnesanvändning när du arbetar med stora filer med stora datamängder
När du bygger en arbetsbok med stora datamängder, eller läser en stor Microsoft Excel-fil, är den totala mängden RAM som processen kommer att ta alltid ett problem. Det finns åtgärder som kan anpassas för att klara utmaningen. Aspose.Cells ger några relevanta alternativ och API-anrop för att minska, minska och optimera minnesanvändningen. Det kan också hjälpa processen att arbeta mer effektivt och köra snabbare.
Använda sig avMemorySetting.MEMORY_PREFERENCE alternativ för att optimera minne som används för celldata för att minska den totala minneskostnaden. När du bygger stora datamängder för celler kan det spara en viss mängd minne jämfört med att använda standardinställningenMemorySetting.NORMAL.
Optimera minnet
Läsa stora Excel-filer
Följande exempel visar hur man läser en stor Microsoft Excel-fil i optimerat läge.
// 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); |
Skriva stora Excel-filer
Följande exempel visar hur man skriver en stor datamängd till ett kalkylblad i optimerat läge.
// 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(); |
Varning
Standardalternativet,MemorySetting.NORMALtillämpas för alla versioner. För vissa situationer, som att bygga en arbetsbok med en stor datamängd för celler,MemorySetting.MEMORY_PREFERENCEalternativet kan optimera minnesanvändningen och minska minneskostnaden för programmet. Det här alternativet kan dock försämra prestandan i vissa speciella fall som följer.
- Åtkomst till Cells slumpmässigt och upprepade gånger : Den mest effektiva sekvensen för att komma åt cellsamlingen är cell för cell i en rad och sedan rad för rad. Speciellt om du får åtkomst till rader/celler av Enumeratorn som hämtats frånCells, RowCollection ochRad , skulle prestandan maximeras medMemorySetting.MEMORY_PREFERENCE.
- Infoga & Ta bort Cells & Rader : Observera att om det finns många insert/delete-operationer för Cells/Rows, kommer prestandaförsämringen att märkas förMemorySetting.MEMORY_PREFERENCE läge jämfört medMemorySetting.NORMALläge.
- Fungerar på olika Cell typer : Om de flesta av cellerna innehåller strängvärden eller formler blir minneskostnaden densamma somMemorySetting.NORMALläge men om det finns många tomma celler eller cellvärden är numeriska, bool och så vidare,MemorySetting.MEMORY_PREFERENCEalternativet ger bättre prestanda.