nHibernate ShowSql会对实时系统产生什么影响吗?

时间:2012-02-21 09:46:04

标签: .net nhibernate logging configuration log4net

我已使用以下配置代码将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>

这会对现场系统产生任何性能影响吗?实时系统上的日志级别是ERROR,所以我猜这意味着记录器不会打开,但是我的nHibernate配置上的ShowSql是否还会耗尽资源?

3 个答案:

答案 0 :(得分:4)

日志记录会对您的效果产生重大影响,但您应该在生产/测试环境中测试多少。使用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-for-use-with-nhibernate

答案 1 :(得分:3)

仅当您希望将SQL输出到控制台而不配置log4net时,才需要

ShowSql()。如果您为“NHibernate.SQL”配置了记录器,则不需要(也不应该使用)ShowSql()

PS:我建议在FormatSql()中添加#if DEBUG以在调试时生成可读的SQL。

PS2:为什么你的TraceAppender命名为“NHibernate * 文件 *日志”? ; - )

答案 2 :(得分:0)

使用启用了.ShowSql()的默认日志记录配置,我的应用程序性能降低了10倍以上。所以要注意它。

同样流利的nhibernate支持配置文件中的configuratin - 在我的情况下#if DEBUG不是解决方案,因为.ShowSql()在测试时减慢了使用应用程序的速度,所以我决定保留它,除非我需要它。