Minska beräkningstiden för Cell.Calculate metoden
Möjliga användningsscenario
Normalt rekommenderar vi användare att anropa Workbook.CalculateFormula()-metoden en gång och sedan få de beräknade värdena för enskilda celler. Men ibland vill användare inte beräkna hela arbetsboken. De vill bara beräkna en enda cell. Aspose.Cells tillhandahåller CalculationOptions.Recursive-egenskapen som du kan ställa in till false och det minskar beräkningstiden för enskilda celler betydligt. Eftersom när den rekursiva egenskapen är inställd på true, beräknas alla beroende av celler vid varje anrop. Men när den rekursiva egenskapen är false, beräknas beroende celler endast en gång och beräknas inte igen vid efterföljande anrop.
Minska beräkningstiden för Cell.Calculate() metoden
Följande exempelkod illustrerar användningen av CalculationOptions.Recursive-egenskapen. Kör denna kod med den angivna exempel på excelfil och kontrollera dess konsolresultat. Du kommer att märka att beräkningstiden har minskat avsevärt efter att den rekursiva egenskapen har ställts in till false. Läs även kommentarerna för en bättre förståelse av denna egenskap.
// 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"); | |
} |
Konsoloutput
Detta är konsoloutputen för ovannämnda exempelkod när den körs med den angivna exempel på excelfil på vår maskin. Observera att din utdata kan skilja sig, men den förflutna tiden efter att den rekursiva egenskapen har ställts in till false kommer alltid att vara mindre än när den är inställd till true.
Recursive True: 96 seconds
Recursive False: 42 seconds