متى يمكنك حفظ طول صفيف إلى متغير محلي في C #

عند قراءة Habr ، صادفت المقال " هل يستحق حفظ طول صفيف إلى متغير محلي في C #؟ " (والذي كان في قسم "best"). يبدو لي سؤالًا غبيًا ، وليس قياسات صحيحة تمامًا (لماذا لا توجد قياسات للحلقات المتداخلة؟) وخاتمة غريبة.

يجب تخزين طول الصفيف في C # في متغير منفصل في الحالة عندما يكون لدينا عدة حلقات متداخلة ، فيما يلي مثال.

إليك رمز اختبار بسيط دون تخزين طول الصفيف في متغير:

Random rnd1 = new Random(DateTime.UtcNow.Millisecond); int[,] arr1 = new int[Int16.MaxValue, Byte.MaxValue]; for (int i = 0; i < arr1.GetLength(0); i++) { for (int j = 0; j < arr1.GetLength(1); j++) { arr1[i, j] = rnd1.Next(Int32.MinValue, Int32.MaxValue); } } 

فيما يلي نفس الرمز مع حفظ طول الصفيف إلى متغير:

 Random rnd1 = new Random(DateTime.UtcNow.Millisecond); int[,] arr1 = new int[Int16.MaxValue, Byte.MaxValue]; int len1 = arr1.GetLength(0), len2 = arr1.GetLength(1); for (int i = 0; i < len1; i++) { for (int j = 0; j < len2; j++) { arr1[i, j] = rnd1.Next(Int32.MinValue, Int32.MaxValue); } } 

يعمل رمز حفظ طول الصفيف في متغير (الخيار الثاني) أسرع حوالي 15٪.

يمكن العثور على إجابة مماثلة في أكثر أو أقل من الكتب السميكة على C # أو .Net ، ولكن في نفس الوقت يقوم شخص ذكي بنشر هذا على Habré ولم يشر إليه أحد في التعليقات أن طول المصفوفة في C # يتم تخزينه في متغير عادة للحلقات المتداخلة وهناك بالفعل المعنى

أردت فقط ترك تعليق هناك ، لكنني لم أستطع المغادرة دون تسجيل ، وبعد التسجيل اتضح أنه بعد التسجيل لم أستطع ترك تعليق هناك (منذ أكثر من 10 أيام مرت منذ النشر). ربما يلاحظ شخص ما هذه الملاحظة ونسخها هناك كتعليق أو شيء من هذا القبيل.

Source: https://habr.com/ru/post/ar438516/


All Articles