Réduire le temps de calcul de la méthode Cell.Calculate
Scénarios d’utilisation possibles
Normalement, nous recommandons aux utilisateurs d’appeler la méthode Workbook.CalculateFormula() une fois, puis d’obtenir les valeurs calculées des cellules individuelles. Mais parfois, les utilisateurs ne veulent pas calculer l’ensemble du classeur. Ils veulent juste calculer une seule cellule. Aspose.Cells fournit la propriété CalculationOptions.Recursive que vous pouvez définir sur false et elle diminuera considérablement le temps de calcul de la cellule individuelle. En effet, lorsque la propriété récursive est définie sur true, alors toutes les dépendances des cellules sont recalculées à chaque appel. Mais lorsque la propriété récursive est false, alors les cellules dépendantes ne sont calculées qu’une seule fois et ne sont pas recalculées lors des appels ultérieurs.
Diminuer le temps de calcul de la méthode Cell.Calculate()
Le code d’exemple suivant illustre l’utilisation de la propriété CalculationOptions.Recursive. Veuillez exécuter ce code avec le fichier Excel d’exemple donné et vérifiez sa sortie console. Vous constaterez que le fait de définir la propriété récursive sur false a considérablement diminué le temps de calcul. Veuillez également lire les commentaires pour mieux comprendre cette propriété.
// 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"); | |
} |
Sortie console
Il s’agit de la sortie console du code d’exemple ci-dessus lors de son exécution avec le fichier Excel d’exemple donné sur notre machine. Veuillez noter que votre sortie peut différer, mais le temps écoulé après avoir défini la propriété récursive sur false sera toujours inférieur à sa définition sur true.
Recursive True: 96 seconds
Recursive False: 42 seconds