Я работаю над внутренней библиотекой, которая должна поддерживать как списки, так и массивы. Это горячий путь, поэтому мы ищем возможности повышения производительности.
В настоящее время он использует IList в параметрах, поскольку нам требуется доступ на основе индекса в библиотеке, и не переписывать его для обоих типов.
Довольно бесплатным улучшением производительности (измеренным и протестированным) было бы внутреннее преобразование его в диапазон, что мы могли бы сделать, просто создав несколько перегрузок, которые преобразуют значение и немедленно передают его, но такое ощущение, что должен быть более чистый способ. Я не большой поклонник большого количества заглушек, особенно если кажется, что они делают одно и то же.
Код: Выделить всё
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