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