Результаты отражения кэша (свойства класса)

Может Вы предоставлять определение таблицы

VENDOR, я понял его. Таблицей VENDOR был MyISAM... (отредактировал Ваш ответ, чтобы сказать мне делать их обоих INNODB;))

(какая-либо причина не , чтобы просто переключить тип ПОСТАВЩИКА на INNODB?)

7
задан cleftheris 14 September 2015 в 08:53
поделиться

4 ответа

Непонятно точно , что вы делаете, но кеширование определенно может иметь значение с отражением.

В частности, если вы вызываете методы (или методы получения / установки свойств) и могут делать это безопасным для типов способом, что касается вызывающего кода, это может иметь огромную разницу , если вы конвертируете MethodInfo в строго типизированный делегат один раз, а затем повторно использовать его.

Если бы вы могли дать нам полный пример того, что вы пытаетесь сделать, это помогло бы нам придумать более конкретные идеи или даже код. Если вы просто собираетесь кэшировать PropertyInfo , который может не иметь такого большого (или какого-либо) эффекта - возможно, что обычные методы Type.GetProperty (и т. Д.) Уже довольно быстрые . Как и в случае с вопросами о производительности, ключевым моментом является измерение того, что вы на самом деле делаете. Внесите изменения и снова измерьте и т. Д.

8
ответ дан 6 December 2019 в 19:40
поделиться

Динамическая сборка должна помочь в решении проблемы производительности отражения. Кто-то реализовал оценщики свойств с использованием динамической сборки здесь .

0
ответ дан 6 December 2019 в 19:40
поделиться

Стоимость отражения не должна быть такой большой, как вы думаете. В дополнение к делегатам (которые обсуждает Джон) вы также можете использовать такие вещи, как HyperDescriptor , чтобы минимизировать затраты на отражение без значительного изменения кода - вместо этого он просто превращается в PropertyDescriptor :

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(myCloudInstance);
// ideally cache props, but not essential

затем

object val = props["IsWhite"].GetValue(myCloudInstance);

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

Однако ... как и Джон, я действительно не уверен на 100%, что вы пытаетесь сделать!

2
ответ дан 6 December 2019 в 19:40
поделиться

Я думаю, что лучший способ сделать это - получить метод получения или установки, преобразовать его в делегат и работать с делегатом, здесь нет более быстрый способ:

PropertyInfo propertyInfoProperty1 = type.GetType().GetProperty("Property1");
Func<TYPE, string> get_Property1 = (Func<TYPE, string>)Delegate.CreateDelegate(typeof(Func<TYPE, string>), propertyInfoProperty1.GetGetMethod());

Затем вызовите метод получения:

string value = get_Property1(type);

Вы можете кэшировать делегаты.

1
ответ дан 6 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: