Изменение размеров массива? - PullRequest
5 голосов
/ 08 марта 2012

Мне интересно, может ли постоянное изменение размера байтовых массивов сильно повлиять на производительность. Я добавляю данные в класс, и если класс уже содержит этот тип данных, мне нужно добавить его в существующий байтовый массив, что означает, что мне нужно изменить его размер. Проблема в том, что у меня есть некоторые типы данных, которые будут добавляться в большом количестве, что означает, что может произойти несколько изменений размера массива.

Повлияет ли это на производительность? Этот класс МОЖЕТ быть очень критичным к производительности.

Если это произойдет, то мне, возможно, придется провести капитальный ремонт.

Ответы [ 2 ]

9 голосов
/ 08 марта 2012

Если требуется изменить размер, вы должны использовать List<byte>.Размеры массивов не могут быть изменены, поэтому вам придется создать совершенно новый массив, а затем скопировать старое содержимое в новый массив перед добавлением дополнительного содержимого (это то, что делает Array.Resize, если это то, на что вы ссылались).

List<T> использует массив для внутреннего использования, но оптимизирует изменение размера, поэтому вам не придется с ним обращаться.

По существу, после заполнения внутреннего массива и добавления нового содержимого, List<T> удвоит внутренний размер массива, следовательно, изменение размера должно происходить очень редко - если вы изменяете размер массива непосредственно с другой стороны, вам придется либо использовать аналогичную стратегию и сохранить «счетчик размеров», либо взять на себя затраты производительности по изменению размерана любое добавление контента.

2 голосов
/ 08 марта 2012

Да, это влияет на производительность.Изменение размера массива не просто делает исходный массив длиннее или короче, но создает новый массив и при необходимости копирует данные из старого в новое.

Как предлагается в комментарии, используйте динамический контейнер, например List или ArrayListв то время как последний не является типом сохранения, но удобен в использовании, что я предпочитаю.Вы можете взглянуть на: http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...