Оптимизатор Отражения NHibernate - что это делает?

Я использовал пакет Text_LanguageDetect pear с некоторыми разумными результатами. Он очень прост в использовании и имеет скромную 52-языковую базу данных. Недостатком является отсутствие определения восточноазиатских языков.

require_once 'Text/LanguageDetect.php';
$l = new Text_LanguageDetect();
$result = $l->detect($text, 4);
if (PEAR::isError($result)) {
    echo $result->getMessage();
} else {
    print_r($result);
}

приводит к:

Array
(
    [german] => 0.407037037037
    [dutch] => 0.288065843621
    [english] => 0.283333333333
    [danish] => 0.234526748971
)

13
задан James L 1 June 2009 в 15:42
поделиться

3 ответа

Если вы хотите больше, чем просто скопировать упоминание оптимизатора отражения в одном абзаце из руководства, есть хорошее обсуждение здесь улучшений производительности с помощью оптимизатора отражения. , а также краткое обсуждение методов.

Из моего ограниченного понимания (все это исходит из чтения, без экспериментов с моей стороны, поэтому исправления приветствуются) суть в том, что на самом деле существует два оптимизатора отражения:

  1. codedom , который в основном генерируется, а затем компилируется (т.е. nhibernate генерирует код Getter / Setter оболочки для ваших сущностей, а затем компилирует его). Судя по всему, это работает только с публичными участниками, и, вероятно, является дополнительным дорогостоящим в использовании, потому что он наивно генерирует классы-оболочки (независимо от того, является ли конкретное поле общедоступным), пытается его скомпилировать и выдает исключение в случае неудачи.

  2. облегченная генерация кода , который использует оккультную практику размышления. Emit для получения / установки значений. Для меня это все еще очень новая область, но личные эксперименты с этим показывают, что вы можете использовать SRE для очень быстрого управления частными переменными, а источник по крайней мере, кажется, обеспечивает излучение для основные поля / свойства независимо от модификатора доступа. Это значение по умолчанию.

Что касается эффекта удара - ну, судя по блестящим графикам в 1 , похоже, что если вы сохраняете / увлажняете много тяжелых объектов во время разработки, это может быть довольно существенный.

11
ответ дан 1 December 2019 в 22:40
поделиться

Из https://www.hibernate.org/hib_docs/nhibernate/html/session-configuration.html

Позволяет использовать Класс, созданный во время выполнения, для установки или получения свойств объекта или компонента вместо использования отражения во время выполнения (свойство системного уровня). Использование оптимизатора отражения приводит к определенным затратам на запуск приложения, но в конечном итоге должно привести к повышению производительности. Вы не можете установить это свойство в hibernate.cfg.xml или в разделе файла конфигурации приложения.

3
ответ дан 1 December 2019 в 22:40
поделиться

Из документации :

Позволяет использовать сгенерированные во время выполнения класс для установки или получения свойств объект или компонент вместо использования отражение времени выполнения (системный уровень свойство). Использование отражения оптимизатор вызывает определенный запуск стоимость в приложении, но должна привести к повышению производительности в долгосрочной запустить. Вы не можете установить это свойство в hibernate.cfg.xml или раздел файл конфигурации приложения.

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

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