Diminuez le temps de calcul de la méthode Cell.Calculate
Scénarios d’utilisation possibles
Normalement, nous recommandons aux utilisateurs d’appelerWorkbook.CalculateFormula()méthode une fois, puis obtenir les valeurs calculées des cellules individuelles. Mais parfois, les utilisateurs ne veulent pas calculer le classeur entier. Ils veulent juste calculer une seule cellule. Aspose.Cells fournitCalculationOptions.Recursive propriété sur laquelle vous pouvez définirfaux et cela réduira considérablement le temps de calcul de chaque cellule. Parce que lorsque la propriété récursive est définie survrai , alors toutes les dépendances des cellules sont recalculées à chaque appel. Mais lorsque la propriété récursive estfaux, les cellules dépendantes ne sont calculées qu’une seule fois et ne sont plus recalculées lors des appels suivants.
Diminuer le temps de calcul de la méthode Cell.Calculate()
L’exemple de code suivant illustre l’utilisation deCalculationOptions.Recursive la propriété. Veuillez exécuter ce code avec leexemple de fichier excel et vérifiez sa sortie console. Vous constaterez que définir la propriété récursive surfauxa considérablement réduit le temps de calcul. Veuillez également lire les commentaires pour une meilleure compréhension de 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
Ceci est la sortie de la console de l’exemple de code ci-dessus lorsqu’il est exécuté avec leexemple de fichier excel sur notre appareil. Veuillez noter que votre sortie peut différer, mais le temps écoulé après avoir défini la propriété récursive surfaux sera toujours inférieur au réglagevrai.
Recursive True: 96 seconds
Recursive False: 42 seconds