Hücre.Calculate yönteminin Hesaplama Zamanını Düşürme

Olası Kullanım Senaryoları

Normalde, kullanıcılara Workbook.CalculateFormula() yöntemini bir kez çağırıp ardından bireysel hücrelerin hesaplanmış değerlerini almasını öneririz. Ancak bazen, kullanıcılar tüm çalışma kitabını hesaplama istemeyebilir. Sadece bir hücreyi hesaplamak isteyebilirler. Aspose.Cells, ayarlayabileceğiniz CalculationOptions.Recursive özelliğini sağlar ve bu özellik, bireysel hücre hesaplama süresini önemli ölçüde azaltacaktır. Çünkü özyinelemeli özellik true olarak ayarlandığında, hücrelerin bağımlıları her çağrıda tekrar hesaplanır. Ancak özyinelemeli özellik false olduğunda bağımlı hücreler yalnızca bir kez hesaplanır ve ardışık çağrılarda tekrar hesaplanmazlar.

Hücre.Calculate() Yönteminin Hesaplama Zamanını Azaltma

Aşağıdaki örnek kod, CalculationOptions.Recursive özelliğinin kullanımını göstermektedir. Lütfen bu kodu verilen örnek excel dosyası ile çalıştırın ve konsol çıktısını kontrol edin. Özyinelemeli özelliğin false olarak ayarlanmasıyla hesaplama süresinin önemli ölçüde azaldığını göreceksiniz. Bu özelliğin daha iyi anlaşılması için yorumları da okuyun.

// 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");
}

Konsol Çıktısı

Bu, verilen örnek excel dosyası ile birlikte yürütüldüğünde yukarıdaki örnek kodun konsol çıktısıdır. Lütfen dikkat edin, çıktınız farklı olabilir ancak özyinelemeli özelliği false olarak ayarladıktan sonra geçen süre her zaman true olarak ayarladıktan sonra geçen süreden daha az olacaktır.

Recursive True: 96 seconds

Recursive False: 42 seconds