Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/41: Рейтинг темы: голосов - 41, средняя оценка - 4.76
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 46
1

Как устроена внутренняя реализация Array.Copy и Array.CopyTo

07.09.2012, 19:48. Показов 7404. Ответов 7
Метки нет (Все метки)

Народ плис, я новичок, но нужна срочная консультация:
Кто знает как устроена внутренняя реализация Array.Copy и Array.CopyTo?
Есть способ скопировать участок одномерного Массива (не начало и не конец) в участок уже существующего другого массива (Тоже не начало и не конец)?
Насколько быстрее работает Cоpy и CopyTo по сравнению с поэлементным копированием в цикле:
A[i]=B[i+k0]?
Как правильно получить ссылку на некоторый элемент массива, так что бы она воспринималась как массив, типа как в С++?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2012, 19:48
Ответы с готовыми решениями:

Array.Copy копирование массива 10 раз
нужно создать массив, заполнить случайными значениями, первое значение должно быть data = 0x47;...

Что означает эта запись array = array.Select((x) => x == max ? sum : x).ToArray()
вот пример class test { static void Main(string args) { ...

Конвертирование HEX array в BYTE array
Собственно сабж. Накопипастил. И слепил это. Скажите а можно лаконичнее? //Художественный...

Как работает Array.Find и Array.FindAll
Здравствуйте, у меня возник вопрос по поводу класса Array и методов Find и FindAll. Видел такой...

7
1268 / 969 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
07.09.2012, 20:56 2
нет различий между Array.Copy и Array.CopyTo, они оба используют одну и туже внешнюю функцию
очевидно внутри реализовано на нативном языке, это быстрей чем ручное копирование

кроме этих методов есть еще отдельный статический класс для копирования Buffer
1
Master of Orion
Эксперт .NET
6088 / 4944 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.09.2012, 21:04 3
Uletchik, создается новый массив, куда записываются копируемые элементы.
0
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 46
07.09.2012, 22:09  [ТС] 4
Спасибо за помощь, Monaх, то что нужно, интересно как скорость работы через буфер в сравнении с таким подходом http://msdn.microsoft.com/ru-r... 1s2k6.aspx (через указатели).


PSilon, не оптимально, у меня 100 тысяные -- милионные массивы, в которых надо поменять не большое количество элементов, в циклах. Думаю что на одних операторах new много будеть теряться, не говоря о копировании всех элементов.
0
Master of Orion
Эксперт .NET
6088 / 4944 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.09.2012, 22:49 5
Uletchik, я не говорю, что это хорошо, я говорю
Цитата Сообщение от Uletchik Посмотреть сообщение
как устроена внутренняя реализация Array.Copy и Array.CopyTo
1
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 46
08.09.2012, 01:28  [ТС] 6
Цитата Сообщение от Psilon Посмотреть сообщение
Uletchik, я не говорю, что это хорошо, я говорю
А понял, спасибо, Psilon.
0
Эксперт .NET
15555 / 11804 / 3097
Регистрация: 17.09.2011
Сообщений: 19,716
08.09.2012, 12:25 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Uletchik Посмотреть сообщение
Насколько быстрее работает Cоpy и CopyTo по сравнению с поэлементным копированием в цикле:
A[i]=B[i+k0]?
Одинаково - в методе CopyTo тот же самый цикл.

Цитата Сообщение от Uletchik Посмотреть сообщение
Как правильно получить ссылку на некоторый элемент массива, так что бы она воспринималась как массив, типа как в С++?
Либо используйте ArraySegment, либо небезопасный код и указатели (работает только с массивами примитивных типов).

Цитата Сообщение от Uletchik Посмотреть сообщение
интересно как скорость работы через буфер в сравнении с таким подходом
Буфер быстрее будет, т.к. копирует память не побайтово, а блоками.
1
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 46
09.09.2012, 01:29  [ТС] 8
Cпасибо kolotur!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2012, 01:29

unsafe byte array to struct array
Есть массив байт размером N. Есть структура, внутри которой enum поле размером в 1 байт. Как...

Замена Array.Copy() C# в JavaScript
Нужна помощь. Не знаю как корректно заменить Array.Copy из C# на JS Array.Copy() принимает 5...

Двумерный массив <array>. const int value = array.size(); value не константа?
#include &lt;array&gt; #include &lt;iostream&gt; using std::array; using std::cout; /*ФУНКЦИЯ...

Присвоить значения переменных в массив Array (class Array в Turbo C++)
Здравствуйте!!! Изучаю help в Turbo C++ 3.1 дошел до класса Array: main() { //при ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru