Hücre.Calculate yönteminin Hesaplama Zamanını Düşürme
Olası Kullanım Senaryoları
Normalde, kullanıcılara Workbook.CalculateFormula() methodunu bir kez çağrıp ardından individüel hücrelerin hesaplanmış değerlerini almayı öneririz. Ancak bazen, kullanıcılar tüm çalışma kitabını hesaplamak istemezler. Sadece tek bir hücreyi hesaplamak isterler. Aspose.Cells, CalculationOptions.Recursive özelliği sağlar ve bu özelliği false olarak ayarlarsanız, individüel hücrelerin hesaplanma süresi önemli ölçüde azalacaktır. Çünkü recursive özelliği true olarak ayarlandığında, her çağrıda hücrelerin bağımlıları tekrar hesaplanır. Ancak recursive özelliği false olarak ayarlandığında, bağımlı hücreler sadece 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. false olarak recursive özelliğini ayarladıktan sonra hesaplama süresinin önemli ölçüde azaldığını göreceksiniz. Lütfen 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-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"); | |
} |
Konsol Çıktısı
Yukarıdaki örnek kodun verilen örnek excel dosyası ile çalıştırıldığında konsol çıktısı budur. Lütfen dikkat edin, kendi çıktınız farklı olabilir ancak recursive özelliğini false olarak ayarladıktan sonra geçen süre her zaman true olarak ayarlamaktan daha az olacaktır.
Recursive true: 51 seconds
Recursive false: 16 seconds