2009-12-16 2 views
2

Я работаю с деревьями выражения Linq (из порта db4o/Mainsoft/Mono) на Compact Framework. Поскольку System.Reflection.Emit не существует, я не могу скомпилировать свои LambdaExpressions в делегаты, которые я хочу сделать по соображениям производительности.ILASM для Compact Framework?

Я подумал, что, возможно, я мог бы преобразовать свое дерево выражений в ИЛ и в основном предоставить отсутствующую функциональность Emit таким образом, но потом я понял, что мне придется либо запустить ILASM на базе WinCE, либо написать мои собственные заголовки PE и assmebly метаданные.

Я бы предпочел наличие ILASM. Разве?

ответ

2

По-видимому, я могу скомпоновать Mono.Cecil для использования в рамках Compact Framework, что позволит мне испускать и загружать сборки.

1

Если вы хотите использовать Лямбда-выражения на CF, вам не нужны ILASM или System.Reflection.Emit. Компилятор C# для CF поддерживает Lamba-выражения, но базовые библиотеки CF не имеют классов Expressions. Если вы добавляете ссылку на сборку с правильными именованными (и правильно реализованными) классами для выражений, вы включаете Лямбда-выражения.

Спасибо за бог, эта сборка уже реализована (http://evain.net/blog/articles/2008/09/22/linq-expression-trees-on-the-compact-framework). Я использую его с доступом к данным Db4O и для SqlCE wit LINQ IQueryableToolkit, и он работает хорошо.

+0

Я использую модифицированную версию этого самого порта System.Linq.Expressions. Я все же хочу скомпилировать LambdaExpression, поскольку интерпретация их заставляет меня беспокоиться о производительности. – codekaizen

+0

И вы сделали некоторые тесты производительности? У меня нет никаких проблем с этим. – TcKs

+0

Да - первоначальное тестирование пользователя указывает на проблемы с производительностью. – codekaizen

Смежные вопросы