Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

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

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

07.09.2012, 19:48. Просмотров 3468. Ответов 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 раз - C#
нужно создать массив, заполнить случайными значениями, первое значение должно быть data = 0x47; скопировать его 10 раз, так что бы было...

Что означает эта запись array = array.Select((x) => x == max ? sum : x).ToArray() - C#
вот пример class test { static void Main(string args) { int array = { 5, -9, 8, 6, -14...

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

Реализация функции textbox CopyTo - C#
Добрый вечер. Подскажите, пожалуйста, как можно реализовать функция textbox.text.copyto ??? Добавлено через 2 часа 14 минут Никто не...

Как преобразовать Array в [] ? - C#
т.е. есть функция, которая возвращает коллекцию int через Array static Array GetInts(int its) { var sub = from i in its...

Как работает Array.Sort - C#
Собственно вопрос в том, как всё-таки работает сортировка Array.Sort? Этот вопрос возник потому, что после анализа время ее работы с...

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

кроме этих методов есть еще отдельный статический класс для копирования Buffer
1
Psilon
Master of Orion
Эксперт .NET
5909 / 4806 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 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
5909 / 4806 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 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
9109 / 7615 / 1211
Регистрация: 17.09.2011
Сообщений: 13,151
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? - C#
то есть, мне нужно что то вроде такого: char array = new char; Console.WriteLine("Введите слово которое вы хотите проверить...

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

Как пользоваться методом Array.Find - C#
Здравствуйте ! Подскажите , как допустим в таком массиве найти есть ли в нем число 12 ? В таких случаях применяют...

Как вывести Jagged Array с помощью оператора foreach - C#
Будьте добры, подскажите, как вывести Jagged Array с помощью оператора foreach (причем, чтобы выводил в подобающем виде). Заранее спасибо.


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

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

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