Minska beräkningstiden för Cell. Beräkna metod
Möjliga användningsscenarier
Normalt rekommenderar vi användare att ringaWorkbook.CalculateFormula() metod en gång och få sedan de beräknade värdena för de enskilda cellerna. Men ibland vill användare inte beräkna hela arbetsboken. De vill bara beräkna en enda cell. Aspose.Cells tillhandahållerBeräkningsalternativ.Rekursiv egenskap som du kan ställa infalskoch det kommer att minska beräkningstiden för individuell cell avsevärt. För när den rekursiva egenskapen är inställd påSannsedan räknas alla beroenden av celler om på varje samtal. Men när den rekursiva egenskapen är inställd påfalsk, sedan beräknas beroende celler endast en gång och beräknas inte igen vid efterföljande samtal.
Minska beräkningstiden för Cell.Calculate()-metoden
Följande exempelkod illustrerar användningen avBeräkningsalternativ.Rekursiv fast egendom. Vänligen kör den här koden med den givnaexempel på excel-fil och kontrollera dess konsolutgång. Du kommer att upptäcka att inställningen av den rekursiva egenskapen tillfalskhar minskat beräkningstiden avsevärt. Läs även kommentarerna för en bättre förståelse av denna fastighet.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
public static void main(String[] args) throws Exception { | |
// Test calculation time after setting recursive true | |
TestCalcTimeRecursive(true); | |
// Test calculation time after setting recursive false | |
TestCalcTimeRecursive(false); | |
} | |
// -------------------------------------------------- | |
static void TestCalcTimeRecursive(boolean rec) throws Exception { | |
String dataDir = Utils.getDataDir(DecreaseCalculationTime.class); | |
// Load your sample workbook | |
Workbook wb = new Workbook(dataDir + "sample.xlsx"); | |
// Access first worksheet | |
Worksheet ws = wb.getWorksheets().get(0); | |
// Set the calculation option, set recursive true or false as per parameter | |
CalculationOptions opts = new CalculationOptions(); | |
opts.setRecursive(rec); | |
// Start calculating time in nanoseconds | |
long startTime = System.nanoTime(); | |
// Calculate cell A1 one million times | |
for (int i = 0; i < 1000000; i++) { | |
ws.getCells().get("A1").calculate(opts); | |
} | |
// Calculate elapsed time in seconds | |
long second = 1000000000; | |
long estimatedTime = System.nanoTime() - startTime; | |
estimatedTime = estimatedTime / second; | |
// Print the elapsed time in seconds | |
System.out.println("Recursive " + rec + ": " + estimatedTime + " seconds"); | |
} |
Konsolutgång
Detta är konsolutgången för ovanstående exempelkod när den körs med den givnaexempel på excel-fil på vår maskin. Observera att din utdata kan skilja sig men den förflutna tiden efter att den rekursiva egenskapen ställts in påfalsk kommer alltid att vara mindre än att ställa in den påSann.
Recursive true: 51 seconds
Recursive false: 16 seconds