Riduci il tempo di calcolo del metodo Cell.Calculate con Python.NET
Possibili Scenari di Utilizzo
Di norma, consigliamo agli utenti di chiamare il metodo workbook.calculate_formula() una volta e poi ottenere i valori calcolati delle singole celle. Quando si lavora con calcoli di singole celle, puoi usare la proprietà calculation_options.recursive per ridurre significativamente i tempi di calcolo. Impostare questa proprietà su False
impedisce il ricalcolo delle celle dipendenti nelle chiamate successive.
Ottimizzazione delle prestazioni di calcolo delle celle
Il seguente esempio dimostra l’uso della proprietà ricorsiva. Usa il file Excel di esempio fornito per testare la differenza di prestazioni. Il codice mostra come impostare recursive=False
riduca i tempi di calcolo evitando ricalcoli ridondanti delle celle dipendenti.
# 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
test_calc_time_recursive(True)
# Test calculation time after setting recursive false
test_calc_time_recursive(False)
import os
import time
from aspose.cells import Workbook, CalculationOptions
def test_calc_time_recursive(rec):
"""
Tests calculation time with recursive option and prints elapsed seconds
"""
# The path to the documents directory
current_dir = os.path.dirname(os.path.abspath(__file__))
data_dir = os.path.join(current_dir, "data")
# Load sample workbook
wb = Workbook(os.path.join(data_dir, "sample.xlsx"))
# Access first worksheet
ws = wb.worksheets[0]
# Set calculation options
opts = CalculationOptions()
opts.recursive = rec
# Start timing
start_time = time.perf_counter()
# Calculate cell A1 one million times
for _ in range(1000000):
ws.cells.get("A1").calculate(opts)
# Calculate elapsed time
elapsed_time = int(time.perf_counter() - start_time)
# Print results
print(f"Recursive {rec}: {elapsed_time} seconds")
Risultati di benchmarking delle prestazioni
L’output tipico quando si esegue il codice ottimizzato con il file di esempio mostra una riduzione significativa dei tempi:
Recursive True: 96 seconds
Recursive False: 42 seconds