Реализация TypeDescriptionProvider / HyperDescriptor - PullRequest
5 голосов
/ 23 февраля 2010

В настоящее время я заполняю свою сетку WPF с использованием сбора данных, который реализует ITypedList, а содержащиеся в нем объекты реализуют ICustomTypeDescriptor. Все свойства определяются во время выполнения.

Я хочу реализовать HyperDescriptor , чтобы повысить производительность, но пример на этой странице больше относится к известным типам, а не к свойствам времени выполнения.

Я бы подумал, что мне нужно реализовать пользовательский метод GetProperties() или аналогичный, чтобы сообщить HyperTypeDescriptor, на какие свойства он должен смотреть, но я не уверен, где это следует установить. Я полагаю, это не сложно, но я явно что-то упускаю.

Любые советы очень ценятся!

1 Ответ

4 голосов
/ 23 февраля 2010

Реализация HyperDescriptor действительно специфична для свойств времени компиляции, поскольку использует ILGenerator и т. Д. И кэширует сгенерированный код. Если вы используете ICustomDescriptor, то вы уже в совершенно другом профиле производительности - например, если ваши пользовательские PropertyDescriptor работают со словарем или хэш-таблицей как мешок свойств, они могут уже будет значительно быстрее, чем необработанное отражение.

Это может быть возможно для дальнейшей оптимизации, но мне нужно знать больше о конкретной реализации. Но это было бы нетривиальной работой, поэтому сначала убедитесь, что этот доступ к членам на самом деле является узким местом, и что сначала вы не можете сделать что-то простое, например, пейджинг или «виртуальный режим».

(уточнение: я автор HyperDescriptor, поэтому хорошо знаю эту область)

...