Будет ли nHibernate ShowSql влиять на живую систему? - PullRequest
5 голосов
/ 21 февраля 2012

Я настроил nHibernate для вывода своих операторов SQL в окно вывода Visual Studio, используя следующий код конфигурации:

var configuration = Fluently.Configure(cfg)
                .Database(
                    MsSqlConfiguration.MsSql2005
                    .ConnectionString(connectionString)
                    .DefaultSchema("dbo")
                    .UseReflectionOptimizer()
                    .AdoNetBatchSize(32)
                    .ShowSql()

и в моем файле Web.config:

<appender name="NHibernateFileLog" type="log4net.Appender.TraceAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n"  />
  </layout>
</appender>

<logger name="NHibernate.SQL" additivity="false">
  <level value="DEBUG"/>
  <appender-ref ref="NHibernateFileLog"/>
</logger>

Повлияет ли это на производительность работающей системы?Уровень журнала в действующей системе - ОШИБКА, поэтому я предполагаю, что это означает, что регистратор не будет включен, но будет ли ShowSql в моей конфигурации nHibernate по-прежнему использовать ресурсы?

Ответы [ 3 ]

4 голосов
/ 21 февраля 2012

Ведение журнала существенно влияет на вашу производительность, однако, сколько вы должны тестировать в вашей рабочей / тестовой среде. При использовании ShowSql (), он отправит SQL на ваш регистратор, который отфильтрует его. Обычно вы настраиваете флаг ShowSql в вашей конфигурации. В этом случае вы можете установить значение false в вашей производственной среде:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="connection.connection_string">
Server=(local);Database=NHibernateFAQ;Integrated Security=SSPI;
        </property>
<property name="show_sql">false</property>
    </session-factory>
</hibernate-configuration>

Configure-log4net к употреблению-с-NHibernate

3 голосов
/ 21 февраля 2012

ShowSql() требуется, только если вы хотите, чтобы ваш SQL выводился на консоль без настройки log4net.Вам не нужно (и не следует использовать) ShowSql(), если у вас настроен регистратор для «NHibernate.SQL».

PS: я бы рекомендовал добавить FormatSql() в #if DEBUG длягенерировать читаемый SQL при отладке.

PS2: почему ваш TraceAppender называется "NHibernate * File * Log"?; -)

0 голосов
/ 21 февраля 2012

Производительность моего приложения снизилась более чем в 10 раз при использовании конфигурации ведения журнала по умолчанию с включенным .ShowSql(). Так что знайте об этом.

Также свободно nhibernate поддерживает конфигурацию из файла конфигурации - в моем случае #if DEBUG не было решением, так как .ShowSql() замедляет работу с приложением во время тестирования, поэтому я решил отключить его, если он мне не нужен.

...