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

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

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

Народ плис, я новичок, но нужна срочная консультация:
Кто знает как устроена внутренняя реализация Array.Copy и Array.CopyTo?
Есть способ скопировать участок одномерного Массива (не начало и не конец) в участок уже существующего другого массива (Тоже не начало и не конец)?
Насколько быстрее работает Cоpy и CopyTo по сравнению с поэлементным копированием в цикле:
A[i]=B[i+k0]?
Как правильно получить ссылку на некоторый элемент массива, так что бы она воспринималась как массив, типа как в С++?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 19:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как устроена внутренняя реализация Array.Copy и Array.CopyTo (C#):

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

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

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

Реализация функции textbox CopyTo
Добрый вечер. Подскажите, пожалуйста, как можно реализовать функция...

Как преобразовать Array в [] ?
т.е. есть функция, которая возвращает коллекцию int через Array static...

Как работает Array.Sort
Собственно вопрос в том, как всё-таки работает сортировка Array.Sort? Этот...

7
m0nax
1200 / 905 / 109
Регистрация: 12.01.2010
Сообщений: 1,891
Завершенные тесты: 3
07.09.2012, 20:56 #2
нет различий между Array.Copy и Array.CopyTo, они оба используют одну и туже внешнюю функцию
очевидно внутри реализовано на нативном языке, это быстрей чем ручное копирование

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


PSilon, не оптимально, у меня 100 тысяные -- милионные массивы, в которых надо поменять не большое количество элементов, в циклах. Думаю что на одних операторах new много будеть теряться, не говоря о копировании всех элементов.
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
07.09.2012, 22:49 #5
Uletchik, я не говорю, что это хорошо, я говорю
Цитата Сообщение от Uletchik Посмотреть сообщение
как устроена внутренняя реализация Array.Copy и Array.CopyTo
1
Uletchik
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 46
08.09.2012, 01:28  [ТС] #6
Цитата Сообщение от Psilon Посмотреть сообщение
Uletchik, я не говорю, что это хорошо, я говорю
А понял, спасибо, Psilon.
0
kolorotur
Эксперт .NET
9926 / 8312 / 2042
Регистрация: 17.09.2011
Сообщений: 14,319
08.09.2012, 12:25 #7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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

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

Цитата Сообщение от Uletchik Посмотреть сообщение
интересно как скорость работы через буфер в сравнении с таким подходом
Буфер быстрее будет, т.к. копирует память не побайтово, а блоками.
1
Uletchik
1 / 1 / 0
Регистрация: 07.09.2012
Сообщений: 46
09.09.2012, 01:29  [ТС] #8
Cпасибо kolotur!
0
09.09.2012, 01:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2012, 01:29
Привет! Вот еще темы с решениями:

Как сделать динамический array?
то есть, мне нужно что то вроде такого: char array = new char;...

Как работает Array.GetLength()
объясните пожалуйста как работает Array.GetLength()? там внутри объекта где то...

Как пользоваться методом Array.Find
Здравствуйте ! Подскажите , как допустим в таком массиве найти есть ...

String array. Как заменить первую букву на заглавную.
Добрый день. У меня есть массив string. Каждый элемент - это отдельное...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru