Reducir el tiempo de cálculo del método Cell.Calculate
Escenarios de uso posibles
Normalmente, recomendamos a los usuarios llamar al método Workbook.CalculateFormula() una vez y luego obtener los valores calculados de las celdas individuales. Pero a veces, los usuarios no desean calcular todo el libro. Solo desean calcular una celda. Aspose.Cells proporciona la propiedad CalculationOptions.Recursive, que se puede establecer en false y disminuirá significativamente el tiempo de cálculo de la celda individual. Cuando la propiedad recursiva se establece en true, entonces todos los dependientes de las celdas se recalculan en cada llamada. Pero cuando la propiedad recursiva es false, las celdas dependientes se calculan solo una vez y no se vuelven a calcular en llamadas subsiguientes.
Reducir el tiempo de cálculo del método Cell.Calculate()
El siguiente código de ejemplo ilustra el uso de la propiedad CalculationOptions.Recursive. Por favor, ejecute este código con el archivo de Excel de ejemplo proporcionado y verifique su salida en la consola. Descubrirá que configurar la propiedad recursiva en false ha reducido significativamente el tiempo de cálculo. También lea los comentarios para comprender mejor esta propiedad.
// 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"); | |
} |
Salida de la consola
Esta es la salida en la consola del código de ejemplo anterior cuando se ejecuta con el archivo de Excel de ejemplo proporcionado en nuestra máquina. Tenga en cuenta que su salida puede ser diferente, pero el tiempo transcurrido después de establecer la propiedad recursiva en false siempre será menor que al establecerla en true.
Recursive True: 96 seconds
Recursive False: 42 seconds