Реализация TypeDescriptionProvider / HyperDescriptor
-
22-09-2019 - |
Вопрос
В настоящее время я заполняю свою сетку WPF, используя сбор данных, который реализует ITypedList
, с содержащимися в нем объектами , реализующими ICustomTypeDescriptor
.Все свойства определяются во время выполнения.
Я хочу реализовать ГиперДескриптор чтобы ускорить производительность, но пример на этой странице больше относится к известным типам, а не к свойствам среды выполнения.
Я бы подумал, что мне нужно было бы реализовать пользовательский GetProperties()
метод или аналогичный, чтобы сообщить HyperTypeDescriptor, на какие свойства ему нужно обратить внимание, но я не уверен, где это должно быть установлено.Я полагаю, это несложно, но я явно чего-то не понимаю.
Любые советы очень ценятся!
Решение
Тот самый HyperDescriptor
реализация действительно специфична для свойств времени компиляции, поскольку она использует ILGenerator
etc и кэширует сгенерированный код.Если вы используете ICustomDescriptor
ты такой уже в совершенно другом профиле производительности - например, если ваш пользовательский PropertyDescriptor
они работают со словарем или хэш-таблицей в качестве пакета свойств, который они могут уже быть значительно быстрее, чем необработанное отражение.
IT мочь можно было бы еще больше оптимизировать его, но мне нужно было бы знать больше о конкретной реализации.Но это была бы нетривиальная работа, поэтому сначала убедитесь, что этот доступ к участникам на самом деле является узким местом, и что вы не могли бы сначала сделать что-то простое, например, подкачку или "виртуальный режим".
(уточнение:Я автор HyperDescriptor, так что я хорошо знаю эту область)