Альтернативы PropertyInfo.GetValue () для моно? - PullRequest
3 голосов
/ 18 июня 2010

У меня есть метод, который имеет следующую подпись:

 private object GetNestedObject<y>(y objToAccess, string nestedObjectName)

Я использую Reflection, чтобы получить nestedObject из объекта objToAccess и вернуть его.

Это работает хорошо, за исключением того, что это действительно медленно (я должен сделать это несколько сотен тысяч раз). Я столкнулся с HyperDescriptor, но так как я запускаю это на Linux, а Mono не поддерживает TypeDescriptionProviders, я не могу его использовать.

Есть ли альтернативы использованию getValue в этом случае? Я всегда мог жестко закодировать в переопределениях для каждого типа, но это нежелательно и добавило бы много накладных расходов на обслуживание в моем случае.

Ответы [ 3 ]

2 голосов
/ 18 июня 2010

Джон Скит написал сообщение в блоге об использовании Delegate.CreateDelegate () для ускорения:

http://msmvps.com/blogs/jon_skeet/archive/2008/08/09/making-reflection-fly-and-exploring-delegates.aspx

Я не знаю, будет ли это работать в Mono.1006 *

0 голосов
/ 18 июня 2010

Нужно ли использовать магические струны?Другой вариант - передать лямбда-выражение, либо записав лямбда-выражение в ваш код, либо сгенерировав лямбда-выражение для доступа к элементу с помощью деревьев выражений.Пройдя по дереву sxpression, вы можете очень легко скомпилировать выражения и кэшировать их для использования.

0 голосов
/ 18 июня 2010

Я не уверен, поддерживает ли Mono его, но для таких случаев (используя Reflection в коде высокой нагрузки) я обычно динамически генерирую специальные классы доступа, используя System.Reflection.Emit. Они генерируются немного дольше, но после этого доступ становится молниеносным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...