Как и когда отказаться от использования массивов в C #? - PullRequest
24 голосов
/ 16 сентября 2008

Мне всегда говорили, что добавление элемента в массив происходит так:

Пустая копия массива + 1 элемент создал, а затем данные из исходный массив копируется в него тогда новые данные для нового элемента затем загружено

Если это так, то использование массива в сценарии, который требует большой активности элементов, противопоказано из-за использования памяти и ЦП, верно?

Если это так, разве вы не должны стараться избегать использования массива как можно чаще, когда будете добавлять много элементов? Стоит ли использовать вместо этого iStringMap? Если это так, что произойдет, если вам нужно более двух измерений И нужно добавить много добавлений элементов. Вы просто принимаете удар по производительности или есть что-то еще, что следует использовать?

Ответы [ 15 ]

1 голос
/ 16 сентября 2008

Этот пост на форуме может быть полезен или не полезен в отношении эффективности различных типов массивов: C # массивы - многомерные и лексикографические

1 голос
/ 16 сентября 2008

Вы правы, массив отлично подходит для поиска. Однако изменение размера массива является дорогостоящим.

В сценарии, где вы изменяете размер массива, вы должны использовать контейнер, который поддерживает инкрементные корректировки размера. Вы можете использовать ArrayList, который позволяет вам установить начальный размер, и вы можете постоянно сравнивать размер с емкостью, а затем увеличивать емкость большим чанком, чтобы ограничить количество размеров.

Или вы можете просто использовать связанный список. Тогда все же медленные взгляды ...

1 голос
/ 16 сентября 2008

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

1 голос
/ 16 сентября 2008

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

1 голос
/ 16 сентября 2008

Лучшее, что вы можете сделать, - это выделить столько памяти, сколько вам нужно, если это возможно. Это не позволит .NET выполнять дополнительные вызовы для получения памяти в куче. В противном случае имеет смысл выделить куски из пяти или любого другого числа, имеющего смысл для вашего приложения.

Это правило, которое вы можете применить ко всему на самом деле.

...