Как такое же сделать для src типа List<Double> ?
Т.е. как получить зафиксированный указатель на
принадлежащий списку массив Double[], чтобы его
можно было явно преобразовать к указателю на Byte ?
Спасибо.
VM>Как такое же сделать для src типа List<Double> ? VM>Т.е. как получить зафиксированный указатель на VM>принадлежащий списку массив Double[], чтобы его VM>можно было явно преобразовать к указателю на Byte ? VM>Спасибо.
Вариант 1.
Вызвать у листа ToArray() и задача сводится к вышеупомянутой.
Вариант 2.
Использовать BitConverter для конвертирования double в byte[]
Здравствуйте, VMak, Вы писали:
VM>Здравствуйте, vit_as, Вы писали:
_>>Вызвать у листа ToArray() и задача сводится к вышеупомянутой.
VM>Предварительного копирования хотелось бы избежать VM>из соображений производительности.
VM>Забыл сказать, что это нужно для NET 2.0
Внутри List<T> всё хранится в массиве private T[] _items; Если лист не меняется, то указатель на массив тоже сохраняется. Этот указатель можно получить через рефлексию (если это делается один раз, то на производительность не повлияет). Но вообще это изврат
А представленный ансейф код работает быстрее чем Buffer.BlockCopy?
Здравствуйте, Spi, Вы писали:
Spi>А представленный ансейф код работает быстрее чем Buffer.BlockCopy?
На самом деле для массивов я и использую BlockCopy.
Приведённый код просто поясняет что я хочу сделать
с List<Double>.
Не могли бы вы показать, как побыстрее получить
через рефлексию нужный мне указатель?
Здравствуйте, VMak, Вы писали:
VM>Здравствуйте, Spi, Вы писали:
Spi>>А представленный ансейф код работает быстрее чем Buffer.BlockCopy?
VM>На самом деле для массивов я и использую BlockCopy. VM>Приведённый код просто поясняет что я хочу сделать VM>с List<Double>. VM>Не могли бы вы показать, как побыстрее получить VM>через рефлексию нужный мне указатель?
List<int> l = new List<int>();
var f = l.GetType().GetField("_items", BindingFlags.Instance | BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Public);
var val = (int[])f.GetValue(l);
Но если будет что-то добавляться в лист, может случиться так, что ему не хватит памяти в выделенном массиве и тогда он создаёт новый массив. Соответственно ссылка будет указыватя на неиспользуемый массив.