Как Linq работает (негласно)?

Может быть, вы можете попробовать реализовать наложение, используя анимацию CSS и CSS-преобразования 3D вместо js? Этого может быть достаточно для улучшения производительности вашей страницы

12
задан PeeHaa 12 April 2013 в 07:47
поделиться

6 ответов

Трудно ответить на вопрос, потому что LINQ является таким количеством разных вещей. Например, придерживаясь C#, следующие вещи включены:

  • Выражения запроса "предварительно обрабатываются" в "C# без выражений запроса", который затем обычно компилируется. Часть выражения запроса спецификации действительно коротка - это - в основном машинный перевод, который не предполагает, что что-либо о реальном значении запроса, вне "порядка переводится в OrderBy/ThenBy/etc".
  • Делегаты используются для представления произвольных действий с конкретной подписью как исполняемый код.
  • Деревья выражений используются для представления того же самого, но как данные (который может быть исследован и переведен в другую форму, например, SQL),
  • Лямбда-выражения используются для преобразования исходного кода или в делегатов или в деревья выражений.
  • Дополнительные методы привыкли большинством поставщиков LINQ к цепочке вместе вызовы статического метода. Это позволяет простой интерфейс (например. IEnumerable<T>) эффективно получать намного больше власти.
  • Анонимные типы используются для проекций - где у Вас есть некоторый разрозненный набор данных, и Вы хотите биты каждого из аспектов тех данных, анонимный тип позволяет Вам собирать их.
  • Неявно введенные локальные переменные (var) используются, прежде всего, при работе с анонимными типами, для поддержания статически типизированного языка, где Вы не можете "говорить" название типа явно.
  • Блоки итератора обычно используются для реализации незавершенных запросов, например, для LINQ к Объектам.
  • Вывод типа используется для создания всего этого намного более гладким - существует много общих методов в LINQ, и без вывода типа это было бы действительно болезненно.
  • Генерация кода используется для превращения модели (например, DBML) в код
  • Частичные типы используются для обеспечения расширяемости сгенерированному коду
  • Атрибуты используются, чтобы предоставить метаданные поставщикам LINQ

Очевидно, многие из них не только используются LINQ, но различные технологии LINQ будут зависеть от них.

Если можно дать больше признака того, какими аспектами Вы интересуетесь, мы можем обеспечивать больше детали.

Если Вы интересуетесь эффективной реализацией LINQ к Объектам, Вы могли бы интересоваться докладом, который я сделал в DDD в Чтении несколько недель назад - в основном реализующий как можно больше LINQ к Объектам за час. Мы были совсем не завершены к концу его, но это должно дать довольно хорошую идею вида вещи, которую необходимо сделать (и буферизация/потоковая передача, блоки итератора, перевод выражения запроса и т.д.). Видео еще не (и я еще не поднял код для загрузки), но если Вы интересно, отбрасываете меня почта по skeet@pobox.com, и я сообщу, когда они произойдут. (Я буду, вероятно, вести блог об этом также.)

18
ответ дан 2 December 2019 в 05:28
поделиться

Моно (частично?) реализует LINQ и открытый исходный код. Возможно, Вы могли изучить их реализацию?

3
ответ дан 2 December 2019 в 05:28
поделиться
2
ответ дан 2 December 2019 в 05:28
поделиться

Возможно, мой LINQ для Схемы R6RS обеспечит некоторое понимание.

Это - 100% семантически и почти 100% синтаксически то же как LINQ, за отмеченным исключением дополнительных параметров вида, использующих 'затем' вместо''.

Некоторые правила/предположения:

  • Только имея дело со списками, никакими поставщиками запроса.
  • Не ленивое, но нетерпеливое понимание.
  • Никакие статические типы, поскольку Схема не использует их.

Моя реализация зависит от нескольких базовых процедур:

  • карта - используемый для 'Выбора'
  • фильтр - используемый, для 'Где'
  • сгладьтесь - используемый для 'SelectMany'
  • вид - процедура мультисортировки по ключу
  • groupby - для группировки конструкций

Остальная часть структуры все создается с помощью макроса.

Привязка хранится в списке, который отмечен со связанными идентификаторами для обеспечения гигиены. Привязка извлечена и оживляется локально, где когда-либо выражение происходит.

Я действительно отслеживал достижения по своему блогу, который может предоставить некоторое понимание возможным проблемам.

2
ответ дан 2 December 2019 в 05:28
поделиться

Для дизайнерских идей смотрите на c омегу, исследовательский проект это birthed Linq. Linq является более прагматической или смягченной версией c омеги, в зависимости от Вашей перспективы.

2
ответ дан 2 December 2019 в 05:28
поделиться

Блог Matt Warren имеет все ответы (и демонстрационная реализация поставщика IQueryable, чтобы дать Вам headstart):

http://blogs.msdn.com/mattwar/

1
ответ дан 2 December 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: