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 seule fois, puis de récupérer les valeurs calculées des cellules individuelles. Mais parfois, les utilisateurs ne souhaitent pas calculer l’ensemble du classeur. Ils veulent simplement calculer une seule cellule. Aspose.Cells fournit la propriété CalculationOptions.Recursive que vous pouvez régler sur false pour réduire considérablement le temps de calcul d’une cellule individuelle. Parce que lorsque la propriété récursive est réglée sur true, tous les dépendants des cellules sont recalculés à chaque appel. Mais lorsque la propriété récursive est réglée sur false, les cellules dépendantes ne sont calculées qu’une seule fois et ne le sont pas à nouveau lors des appels suivants.
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 fourni (5472288.xlsx) et vérifier sa sortie console. Vous constaterez que le fait de définir la propriété récursive sur false a 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-Java | |
public static void main(String[] args) throws Exception { | |
// Test calculation time after setting recursive true | |
TestCalcTimeRecursive(true); | |
// Test calculation time after setting recursive false | |
TestCalcTimeRecursive(false); | |
} | |
// -------------------------------------------------- | |
static void TestCalcTimeRecursive(boolean rec) throws Exception { | |
String dataDir = Utils.getDataDir(DecreaseCalculationTime.class); | |
// Load your sample workbook | |
Workbook wb = new Workbook(dataDir + "sample.xlsx"); | |
// Access first worksheet | |
Worksheet ws = wb.getWorksheets().get(0); | |
// Set the calculation option, set recursive true or false as per parameter | |
CalculationOptions opts = new CalculationOptions(); | |
opts.setRecursive(rec); | |
// Start calculating time in nanoseconds | |
long startTime = System.nanoTime(); | |
// Calculate cell A1 one million times | |
for (int i = 0; i < 1000000; i++) { | |
ws.getCells().get("A1").calculate(opts); | |
} | |
// Calculate elapsed time in seconds | |
long second = 1000000000; | |
long estimatedTime = System.nanoTime() - startTime; | |
estimatedTime = estimatedTime / second; | |
// Print the elapsed time in seconds | |
System.out.println("Recursive " + rec + ": " + estimatedTime + " seconds"); | |
} |
Sortie console
Il s’agit de la sortie console du code d’exemple ci-dessus lorsqu’il est exécuté avec le fichier Excel d’exemple fourni (5472288.xlsx) 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 à celui pour true.
Recursive true: 51 seconds
Recursive false: 16 seconds