Задать вопрос
@beduin01

Как в C# зарезервировать место под массив?

Предположим у меня есть массив. Я хочу зарезервировать под него в памяти место, чтобы снизить количество аллокаций. Как это можно сделать?
  • Вопрос задан
  • 701 просмотр
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
@kttotto
пофиг на чем писать
Я так понимаю, что Вы просто не сочли нужным почитать за массивы в C#, т.к. эта информация написана в каждом туториале по ним.

При объявлении массива, вы сразу указываете его размер. После его создания, Вы уже не сможете этот размер изменить (ничего "прибавить" Вы не сможете, можете только изменять значения элементов), именно потому, что под него уже выделена память. Если Вы что-то о массивах читали, то должны знать определение "Массив - это совокупность однотипных данных, расположенных непрерывно в памяти."

На уровне кода массив это тот же список, у которого просто нет методов для увеличения его размера. Список Вы так же, при объявлении можете указать его начальный размер, но если его будет не хватать, то внутри отработает ресайз, обычно на величину текущего размера умноженного на два (есть варианты, когда размер прыгает по простым числам). Частый ресайз это не очень хорошо, т.к затрачивается время на резервирование нового пространства и копирования туда значений, плюс будет мусор для gc. Это касается List, т.к. он просто надстройка над Array.

Есть другие виды списков, которые внутри являются связанными списками. Вообще C# достаточно богат видами списков, их желательно знать, чтоб правильно выбрать необходимый под свою задачу. И как я понял, Вы хотите массив, с возможностью изменять его размер. Тогда Вам нужен List, можете задать ему начальный размер new List(100). Увеличение будет происходить автоматом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Для МАССИВА в конструкторе вы всегда и указываете его размер. Память выделяется сразу.
Для листа - есть перегруженый конструктор.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы