Преобразование списка ИЛИ массива в диапазон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

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