Преобразование списка ИЛИ массива в диапазонC#

Место общения программистов C#
Ответить
Anonymous
 Преобразование списка ИЛИ массива в диапазон

Сообщение Anonymous »

Я работаю над внутренней библиотекой, которая должна поддерживать как списки, так и массивы. Это горячий путь, поэтому мы ищем возможности повышения производительности.
В настоящее время он использует IList в параметрах, поскольку нам требуется доступ на основе индекса в библиотеке, и не переписывать его для обоих типов.

Код: Выделить всё

public int Foo(IList values);
Довольно бесплатным улучшением производительности (измеренным и протестированным) было бы внутреннее преобразование его в диапазон, что мы могли бы сделать, просто создав несколько перегрузок, которые преобразуют значение и немедленно передают его, но такое ощущение, что должен быть более чистый способ. Я не большой поклонник большого количества заглушек, особенно если кажется, что они делают одно и то же.

Код: Выделить всё

public int Foo(T[] values)
=> Foo(values.AsSpan());

public int Foo(List values)
=> Foo(CollectionsMarshal.AsSpan(values));

private int Foo(Span values)
Существует ли какой-либо интерфейс/маршал, который можно использовать как для списка, так и для массива, который преобразует их в диапазон?


Подробнее здесь: https://stackoverflow.com/questions/786 ... ay-to-span
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»