Уменьшите время расчета Cell. Метод расчета

Возможные сценарии использования

Обычно мы рекомендуем пользователям звонитьРабочая книга.ВычислитьФормулу()метод один раз, а затем получить рассчитанные значения отдельных ячеек. Но иногда пользователи не хотят вычислять всю книгу. Они просто хотят вычислить одну ячейку. Aspose.Cells предоставляетCalculationOptions.Recursive свойство, которое вы можете установить дляЛОЖЬ и это значительно уменьшит время расчета отдельной ячейки. Поскольку, когда рекурсивное свойство установлено вистинный , то все зависимые ячейки пересчитываются при каждом вызове. Но когда рекурсивное свойствоЛОЖЬ, то зависимые ячейки вычисляются только один раз и не вычисляются повторно при последующих вызовах.

Уменьшить время расчета метода Cell.Calculate().

Следующий пример кода иллюстрирует использованиеCalculationOptions.Recursive имущество. Пожалуйста, выполните этот код с указаннымобразец эксель файла и проверьте его консольный вывод. Вы обнаружите, что установка рекурсивного свойства наЛОЖЬзначительно сократил время расчета. Также прочитайте комментарии, чтобы лучше понять это свойство.

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

Консольный вывод

Это консольный вывод приведенного выше примера кода при выполнении с заданнымобразец эксель файла на нашей машине. Обратите внимание, что ваш вывод может отличаться, но время, прошедшее после установки рекурсивного свойства наЛОЖЬ всегда будет меньше, чем при установкеистинный.

Recursive True: 96 seconds

Recursive False: 42 seconds