Как избежать повторного проекционного кода в Entity Framework

Я пытаюсь решить проблему, аналогичную описанной здесь

Инициализация строго типизированных объектов в LINQ to Entities

только из полностью противоположная направление . В моем хранилище есть несколько функций, которые возвращают данные одинаковой формы. Проблема заключается в моем коде проекции:

select new pocoClass
 {
   // complex projection that is several pages long includes grabbing a graph of data
 }

на данный момент он существует для каждого запроса в хранилище. Я пытался переместить его в инициализатор объекта, но это дает мне ужас Используя булевы матрицы, размер которых обычно составляет от пары дюжин до пары сотен, они обычно довольно разрежены (всего 2-4 ненулевых элемента в большинстве строк и столбцов), и в моей среде выполнения во многом преобладает их умножение.

Что структура данных лучше всего подходит для ускорения умножения в этих обстоятельствах?

В настоящее время я сохраняю каждую матрицу в последовательном наборе битов (массив из 64-битных длин) по строкам и умножаю их с помощью в основном стандартного алгоритма, просто ускорил для разреженность с быстрой операцией определения местоположения следующего установленного бита в слове и с векторизацией с помощью битовых масок.

Должен ли я действительно использовать какое-то разреженное представление?

9
задан jkff 5 September 2010 в 13:51
поделиться