تقليل وقت حساب أسلوب Cell.Calculate
سيناريوهات الاستخدام المحتملة
عادةً، نوصي المستخدمين بالاتصال بالطريقة Workbook.CalculateFormula() مرة واحدة ثم الحصول على القيم المحسوبة للخلايا الفردية. ولكن في بعض الأحيان، قد لا يرغب المستخدمون في حساب الدفتر بأكمله. إنما يرغبون في حساب خلية واحدة فقط. توفر Aspose.Cells خاصية CalculationOptions.Recursive يمكنك تعيينها على false وسوف تقلل من وقت حساب الخلية الفردية بشكل كبير. لأنه عندما يكون الخاصية التكرارية مُعيَّنة إلى true، يتم إعادة حساب جميع المستندات للخلايا في كل دعوة. ولكن عندما تكون الخاصية التكرارية صفر** إذاً، يتم حساب الخلايا المعتمدة مرة واحدة فقط ولا يتم حسابها مرة أخرى في الدعوات التالية.
تخفيض وقت حساب الخلية لوسيلة (.Calculate())
يوضح الكود العيني التالي استخدام خاصية CalculationOptions.Recursive. يرجى تنفيذ هذا الكود مع ملف الإكسل العيني المُعطى والتحقق من إخراجه في وحدة التحكم. ستجد أن تعيين الخاصية التكرارية إلى false قلل من وقت الحساب بشكل كبير. يرجى أيضًا قراءة التعليقات لفهم هذه الخاصية بشكل أفضل.
// 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"); | |
} |
مخرجات الوحدة
هذا هو إخراج وحدة التحكم لكود العينة أعلاه عند تنفيذه مع ملف الإكسل العيني المُعطى على جهازنا. يُرجى ملاحظة أن الإخراج الخاص بك قد يختلف ولكن الوقت المنقضي بعد تعيين الخاصية التكرارية إلى false سيكون دائمًا أقل من تعيينها إلى true.
Recursive True: 96 seconds
Recursive False: 42 seconds