Ridurre il tempo di calcolo del metodo Cell.Calculate
Possibili Scenari di Utilizzo
Normalmente consigliamo 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 solo calcolare una singola cella. Aspose.Cells fornisce la proprietà CalculationOptions.Recursive che è possibile impostare su false e diminuirà significativamente il tempo di calcolo della cella individuale. Perché quando la proprietà ricorsiva è impostata su true, allora tutti i dipendenti delle celle vengono ricalcolati ad ogni chiamata. Ma quando la proprietà ricorsiva è false, allora le celle dipendenti vengono calcolate solo una volta e non vengono calcolate nuovamente nelle chiamate successive.
Ridurre il tempo di calcolo del metodo Cell.Calculate()
Il seguente codice di esempio illustra l’utilizzo della proprietà CalculationOptions.Recursive. Si prega di eseguire questo codice con il file Excel di esempio e controllare il suo output sulla console. Troverete che impostando la proprietà ricorsiva su false ha ridotto significativamente il tempo di calcolo. Si prega inoltre 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-.NET | |
// Test calculation time after setting recursive true | |
TestCalcTimeRecursive(true); | |
// Test calculation time after setting recursive false | |
TestCalcTimeRecursive(false); |
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
static void TestCalcTimeRecursive(bool rec) | |
{ | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); | |
// Load your sample workbook | |
Workbook wb = new Workbook(dataDir + "sample.xlsx"); | |
// Access first worksheet | |
Worksheet ws = wb.Worksheets[0]; | |
// Set the calculation option, set recursive true or false as per parameter | |
CalculationOptions opts = new CalculationOptions(); | |
opts.Recursive = rec; | |
// Start stop watch | |
Stopwatch sw = new Stopwatch(); | |
sw.Start(); | |
// Calculate cell A1 one million times | |
for (int i = 0; i < 1000000; i++) | |
{ | |
ws.Cells["A1"].Calculate(opts); | |
} | |
// Stop the watch | |
sw.Stop(); | |
// Calculate elapsed time in seconds | |
long second = 1000; | |
long estimatedTime = sw.ElapsedMilliseconds / second; | |
// Print the elapsed time in seconds | |
Console.WriteLine("Recursive " + rec + ": " + estimatedTime + " seconds"); | |
} |
Output della console
Questo è l’output della console del codice di esempio precedente quando eseguito con il file Excel di esempio sulla nostra macchina. 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 quando è impostata su true.
Recursive True: 96 seconds
Recursive False: 42 seconds