Генераторы исходного кода C#: генерируйте другой код для вызовов одного и того же метода.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Генераторы исходного кода C#: генерируйте другой код для вызовов одного и того же метода.

Сообщение Anonymous »

Я изложу свой вопрос на конкретном примере. Актуальный вопрос находится внизу этого текста.
Введение
Я хотел бы извлечь некоторые невыровненные данные. из массивов байтов, где указаны
  • позиция начального бита
  • количество битов
  • независимо от того, имеют ли данные формат «сначала старший бит (с обратным порядком байтов)» или «сначала младший бит» (с прямым порядком байтов)
Для этого я создал Bitpacker< /code> класс, предлагающий статический метод

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

  ulong ReadRaw(byte[] src, int startBit, int bitLength, Endianness endianness = Endianness.LSB_FIRST)
Этот метод, конечно, должен выполнить некоторые вычисления, чтобы получить нужные биты из байтов, используя циклы и т. д., что медленно. Мне нужно оценивать данные порядка нескольких тысяч раз в секунду.
Поскольку аргументы представляют собой константы, известные во время компиляции, я мог бы жестко запрограммировать быстрый вариант, вручную находя, какие биты нужно извлечь и как их сдвинуть.
Например. следующие два присваивания raw делают то же самое:

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

ulong raw;

// Manually extract bits
raw = ((ulong)(src[5] & 0xFC) >> 2) + ((ulong)(src[6] & 0x3) 

Подробнее здесь: [url]https://stackoverflow.com/questions/75015758/c-sharp-source-generators-generate-different-code-for-calls-to-the-same-method[/url]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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