NHibernate Profiler - 数据库持续时间和总持续时间之间存在巨大差异?

Mar*_*tta 11 nhibernate fluent-nhibernate nhprof

我有一个广泛使用NHibernate的应用程序.我已经开始使用NHibernate Profiler来识别可能的性能问题.我的问题与Query Durations统计信息有关.

统计数据在数据库持续时间和总持续时间中细分.据我所读,数字应该非常接近.然而,我看到相对较大的差异,我正试图弄清楚这些的来源.这是一些数据

替代文字

我有什么想法可以开始解决这些问题吗?

Dan*_*olm 6

您的应用程序是否使用log4net?如果是这样,您应该检查您的log4net配置并调低您从NHibernate记录的数据量.

我正在处理的项目示例:对于返回60行/对象的查询,将DEBUG级别的所有NHibernate日志消息记录到文件会将NHProf报告的总持续时间从8ms增加到大约8000ms!

限制NHibernate输出的示例配置:

<root>
    <level value="ALL" />
    <appender-ref ref="console" />
    <appender-ref ref="trace" />
</root>

<logger name="NHibernate">
    <level value="WARN" />
</logger>
Run Code Online (Sandbox Code Playgroud)

如果这不能解决您的问题,也许您可​​以使用dotTrace或ANTS Profiler等性能分析工具来识别代码中的潜在瓶颈.这将使您清楚地了解/ NHibernate代码中的哪些方法花费了大量时间.


Baz*_*nga 0

嗨,我认为您没有找对地方。您不应该查看数据库持续时间等。一旦达到 dB 级别,您就无法对执行执行太多操作。

相反,您应该关注的是向数据库发送了多少查询。您可以通过避免冗余调用或缓存某些查询来以某种方式最小化它们吗?您是只检索与您相关的属性,还是将整个对象加载到内存中然后对其进行处理。

另外,您正在使用什么平台,我也许可以建议您使用更好的工具来识别应用程序中的瓶颈。

希望有帮助。