Динамическое добавление элемента массива, что быстрее?
От: _Michael Украина  
Дата: 25.10.05 13:06
Оценка:
Есть два варианта для добавления эелемента массива в уже существующий массив:

1. ArrayList.Add(object), с последующей конвертацией всего массива в нужный нам тип, —
ourArray = (type_of_our_array[])tmpArrayList.ToArray(typeof(type_of_our_array));

2. Добавление с использованием следующей кострукции:
type_of_our_array[] tmpItem = new type_of_our_array[ourArray.Length + 1];
ourArray.CopyTo(tmpItem, 0);
ourArray = tmpItem;
ourArray[ourArray.Length — 1] = object;


для простых типов int, double, в№1 однозначно быстрее, но для массива классов, которые содержат другие классы или их массивы тесты дали неоднозначный вариант.
Кто нибудь может сказать, что быстрее работает с добавлением сложных(вложенных) классов и почему?

Спасибо заранее!
Re: Динамическое добавление элемента массива, что быстрее?
От: xbit Россия  
Дата: 25.10.05 13:20
Оценка:
Если задача изначально требует добавления в массив (удаления из массива) элементов, то корректнее всего для этой цели массивом не пользоваться.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Нас не догонят!
Re[2]: Динамическое добавление элемента массива, что быстрее
От: _Michael Украина  
Дата: 25.10.05 13:23
Оценка:
Здравствуйте, xbit, Вы писали:

X>Если задача изначально требует добавления в массив (удаления из массива) элементов, то корректнее всего для этой цели массивом не пользоваться.


Задача требует только добавлять.
Вы имете ввиду что необходимо в этом случае пользоваться ArrayListом?
Re: Динамическое добавление элемента массива, что быстрее?
От: AlLucky Беларусь Qulix Systems
Дата: 25.10.05 13:34
Оценка:
Здравствуйте, _Michael, Вы писали:

_M>для простых типов int, double, в№1 однозначно быстрее,

Потому что неоптимально пишете
_M>но для массива классов, которые содержат другие классы или их массивы тесты дали неоднозначный вариант.
_M>Кто нибудь может сказать, что быстрее работает с добавлением сложных(вложенных) классов и почему?

_M>Спасибо заранее!

ИМХО:
Посмотрите реализацию того же ArrayList'а. Увидите, что он использует внутри простой массив (что естественно). Так вот при добавлении вэлбю-типов происходит пресловутый боксинг, что замедляет работу, сказываясь на производительности. Поэтому второй вариант при правильном программировании (например, увеличение размера массива не на 1, а в два раза) будет быстрее.
Но лучше использовать дженерики и не заморачиваться. Тогда вариант с ArrayList будет по скорости не уступать (или не намного уступать) варианту с массивом (т.к. внутри реализует практически тоже самое).

Что же касается добавления классов, то не заморачивайтесь с массивами, а используйте созданные уже коллекции — люди их не зря писали, производительность у них на уровне.
Sincerely Mine AlLucky Sly
<<Слушаю болтовню коллег...>>
Aleksandr Sly
Re[3]: Динамическое добавление элемента массива, что быстрее
От: xbit Россия  
Дата: 25.10.05 13:36
Оценка:
Здравствуйте, _Michael, Вы писали:

_M>Задача требует только добавлять.

_M>Вы имете ввиду что необходимо в этом случае пользоваться ArrayListом?

1. Если у вас .NET framework 1.1, то:
ArrayList myList;


2. Если у вас .NET framework 2.0, то:
List<MyClass> myList;


Предпочтительнее 2-ой вариант, т.к. более безопасен, быстрее, не требуется конвертировать тип.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Нас не догонят!
Re: Динамическое добавление элемента массива, что быстрее?
От: _Michael Украина  
Дата: 25.10.05 13:42
Оценка:
Здравствуйте, _Michael, Вы писали:

_M>Есть два варианта для добавления эелемента массива в уже существующий массив:


Спасибо всем за ответы, но в данном конкретном случае, для добавление в массив — сложных классов,
какой вариант будет быстрее?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.