Какой из них более эффективен: List <int> или int []

Может ли кто-нибудь сказать мне, какая из них более эффективна между List<int> и int[]. Потому что я работаю над проектом, и, как вы, возможно, знаете, эффективность настолько важна сейчас.

Если вы добавили некоторые вводные заметки на свой пост, было бы замечательно:)

Ответ 1

(list should be resizable) ? List<int> : int[]

List<int> - это оболочка для int[], которая по мере необходимости изменяет размеры. С JIT-inlining они должны выполняться почти одинаково, но JIT будет иметь более легкое время, выходящее за дополнительную производительность от int[], потому что это примитив CLI с выделенными инструкциями IL.

Ответ 2

Просто для удовольствия, я побежал это:

int cap = 100000;

Stopwatch sw1 = new Stopwatch();
sw1.Start();

int[] ix = new int[cap];
for (int x = 0; x < cap; x++)
{
    ix[x] = 1;
}

sw1.Stop();

Stopwatch sw2 = new Stopwatch();
sw2.Start();
List<int> iy = new List<int>(cap);
for (int y = 0; y < cap; y++)
{
    iy.Add(y);
}
sw2.Stop();

Console.WriteLine(cap.ToString() + "     int[]=" + sw1.ElapsedTicks.ToString());
Console.WriteLine(cap.ToString() + " List<int>=" + sw2.ElapsedTicks.ToString());

Console.ReadKey();

И получил следующее:

100000 int[]=1796542
100000 List=2517922

Я пробовал это в истекшие миллисекунды и получил 0 и 1 соответственно. Ясно, что int [] быстрее, но если вы не говорите о огромных массивах, я бы сказал, что это просто номинально.

Ответ 3

Если вы точно знаете, сколько элементов будет в коллекции, и не нужны какие-либо дополнительные функции List<int> AND (это очень серьезная И) производительность - это серьезную озабоченность, идите с int[]. Иначе придерживайтесь List<int>.

Ответ 4

последний эффективнее.
В исходном коде List<> указан некоторыми массивами.
Например, List<Type> aa=new List<Type>();
В общем случае объявляется array Type[], длина которого является определенным числом. Другими словами, если вы объявите List<>, большое пространство уже использовалось.
Если элемент List<>'s не соответствует длине, массив должен быть скопирован в другой. Поэтому лучше не использовать List<>.
Лучший способ использования - объявить его длину.
Список aa=new List<Type>(10);

Ответ 5

Список использует массив внутри, поэтому использование массива (правильно) всегда будет более эффективным (или, по крайней мере, как) эффективным.

Ответ 6

Если вы планируете использовать любые функции, которые предоставил список (поиск, сортировка, удаление, изменение размера), я бы пошел со списком, потому что, скорее всего, эти функции уже очень оптимизированы, и вы не сможете писать лучше их версий.