Verringerung der Berechnungszeit der Cell.Calculate Methode
Mögliche Verwendungsszenarien
Normalerweise empfehlen wir Benutzern, die Methode Workbook.CalculateFormula() einmal aufzurufen und dann die berechneten Werte der einzelnen Zellen zu erhalten. Manchmal möchten Benutzer jedoch nicht das gesamte Arbeitsblatt berechnen. Sie möchten nur eine einzelne Zelle berechnen. Aspose.Cells bietet die Eigenschaft CalculationOptions.Recursive, die Sie auf false setzen können, um die Berechnungszeit der einzelnen Zelle erheblich zu verringern. Denn wenn die rekursive Eigenschaft auf true gesetzt ist, werden alle Abhängigen von Zellen bei jedem Aufruf neu berechnet. Wenn die rekursive Eigenschaft jedoch auf false gesetzt ist, werden abhängige Zellen nur einmal berechnet und bei nachfolgenden Aufrufen nicht erneut berechnet.
Verringerung der Berechnungszeit der Cell.Calculate() Methode
Der folgende Beispielcode veranschaulicht die Verwendung der CalculationOptions.Recursive-Eigenschaft. Bitte führen Sie diesen Code mit der angegebenen [Beispiel-Excel-Datei] (5113710.xlsx) aus und überprüfen Sie die Konsolenausgabe. Sie werden feststellen, dass die Einstellung der rekursiven Eigenschaft auf false die Berechnungszeit erheblich verringert hat. Lesen Sie bitte auch die Kommentare für ein besseres Verständnis dieser Eigenschaft.
// 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"); | |
} |
Konsolenausgabe
Dies ist die Konsolenausgabe des obigen Beispielcodes, wenn er mit der gegebenen [Beispiel-Excel-Datei] (5113710.xlsx) auf unserer Maschine ausgeführt wird. Bitte beachten Sie, dass Ihr Output abweichen kann, aber die verstrichene Zeit nach Einstellen der rekursiven Eigenschaft auf false wird immer kürzer sein als bei Einstellung auf true.
Recursive True: 96 seconds
Recursive False: 42 seconds