- PVSM.RU - https://www.pvsm.ru -
Читая Хабр, я наткнулся на статью "Стоит ли сохранять длину массива в локальную переменную в C#? [1]" (которая была в разделе «лучшее»). Мне кажется глупый вопрос, не совсем корректные измерения (почему нет измерений для вложенных циклов?) и странный вывод.
Длину массива в С# стоит сохранять в отдельную переменную в случае когда у нас несколько вложенных циклов, ниже пример.
Вот простой тестовый код без сохранения длины массива в переменную:
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);
}
}
Вот тот же код c сохранением длины массива в переменную:
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, но при этом умный человек постит это на Хабре и никто в комментариях не указал ему что длину массива в С# сохраняют в переменную обычно для вложенных циклов и там это действительно имеет смысл.
Я просто хотел оставить там комментарий, но без регистрации не смог, а после регистрации оказалось — что я и после регистрации не могу оставить там комментарий (так как прошло более 10 дней с момента публикации). Может кто-то заметит эту заметку и скопирует ее туда в виде комментария или вроде того.
Автор: yulashivom
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-2/307414
Ссылки в тексте:
[1] Стоит ли сохранять длину массива в локальную переменную в C#?: https://habr.com/post/434060/
[2] Источник: https://habr.com/ru/post/438516/?utm_campaign=438516
Нажмите здесь для печати.