2010-07-24 2 views
4

У меня есть класс в SDK, для которого все интересующие меня объекты. Я знаю, что единственный способ (я думаю, единственный способ это) - использовать рефлексию, которую большинство людей считают медленной и т. Д. (Хотя я видел статьи, которые иллюстрируют, как в некоторых случаях это не так медленно, как первоначально предполагалось).Лучший способ вызвать каждое свойство в классе

Есть ли лучший способ, чем перебрать и вызвать каждое свойство в целевом классе?

Кроме того, почему отражение считается настолько медленным?

+1

Насколько медленным является отражение? - http://stackoverflow.com/questions/771524/how-slow-is-reflection-c –

ответ

0

Вы можете использовать отражение для генерации кода C#, доступ к которому можно получить непосредственно ко всем интересующим вас объектам. Это будет более быстрый способ выполнения вызовов.

Я думаю, что отражение - неплохой вариант для вас. Это не , что медленный.

0

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

1

Возможно, стоит взглянуть на TypeDescriptors. Насколько мне известно, у них есть некоторые преимущества в производительности по сравнению с использованием рефлексии и работают немного по-другому (например, они кэшируют метаданные). Статья MSDN путала меня в том, как она описывает, как отражение используется дескрипторами типа, поэтому вам может потребоваться более подробное объяснение (потому что 3-я ссылка может быть более полезна).

API для дескрипторов типов аналогичен используемому для отражения.

Перейдите:

SOOM свободные ответы на ваши вопросы тогда: 1) Из-за кэширования и немного другая реализация для отражения TypeDescriptors my обеспечивает повышение производительности по сравнению с одной только перегрузкой

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

+0

Множество отраженных API кэширует результаты и промежуточные результаты, стратегия кэша имеет место для улучшения в ранних версиях, но стала намного лучше , Проверьте: http://msdn.microsoft.com/en-us/magazine/cc163759.aspx – marr75

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