Ridurre il tempo di calcolo del metodo Cell.Calculate
Possibili Scenari di Utilizzo
Normalmente, si consiglia agli utenti di chiamare il metodo Workbook.CalculateFormula() una volta e quindi ottenere i valori calcolati delle singole celle. Ma a volte, gli utenti non vogliono calcolare l’intero workbook. Vogliono semplicemente calcolare una singola cella. Aspose.Cells fornisce la proprietà CalculationOptions.Recursive che puoi impostare su false e ridurrà significativamente il tempo di calcolo di una singola cella. Perché quando la proprietà ricorsiva è impostata su true, tutte le dipendenze delle celle vengono ricalcolate a ogni chiamata. Ma quando la proprietà ricorsiva è impostata su false, le celle dipendenti vengono calcolate una sola volta e non vengono ricalcolate nelle chiamate successive.
Ridurre il tempo di calcolo del metodo Cell.Calculate()
Il seguente codice di esempio illustra l’uso della proprietà CalculationOptions.Recursive. Si prega di eseguire questo codice con il file excel di esempio fornito e controllare l’output della console. Si noterà che l’impostazione della proprietà ricorsiva su false ha ridotto notevolmente il tempo di calcolo. Si prega anche di leggere i commenti per una migliore comprensione di questa proprietà.
// 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"); | |
} |
Output della console
Questo è l’output della console del codice di esempio sopra eseguito con il file excel di esempio sul nostro computer. Si prega di notare che il proprio output potrebbe differire, ma il tempo trascorso dopo aver impostato la proprietà ricorsiva su false sarà sempre inferiore rispetto a impostarla su true.
Recursive true: 51 seconds
Recursive false: 16 seconds